I was trying to use char* pointers to refer to strings and vector<char> & dynamic arrays & I have a doubt with the following results :-
CODE 1:-
#include <iostream>
#include <string>
using namespace std;
int main()
{
    cout<<"executing...\n";
    string s="abcde";
    char *c=&s[0];
    cout<<c<<"\n";
    s.~string();
    cout<<c<<"\n";
    cout<<"executed";
    return 0;
}
The output of this code is :-
executing...
abcde
abcde
executed 
CODE 2:-
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    cout<<"executing...\n";
    vector<char> v {'a','b','c','d','e'};
    char *p=&v[0];
    cout<<p<<"\n";
    v.~vector();
    cout<<p<<"\n";
    cout<<"executed";
    return 0;
}
The output for this code is :-
executing...
abcde
executed 
CODE 3 (with dynamic arrays):-
#include <iostream>
using namespace std;
int main()
{
    cout<<"executing...\n";
    char* c=new char[20] {'a','b','c','d','e'};
    char *p=c;
    cout<<p;
    delete[] c;
    cout<<"\n"<<p<<"\n";
    cout<<"executed";
    return 0;
}
The output for this code is similar to CODE 2:-
executing...
abcde
executed 
I want to know why CODE 1 produces an output different from CODE 2 & CODE 3 ? What problem does string have that it behaves differently from vector<char> & dynamic arrays ?
 
     
    