Digging through the c++ code, it looks like it does a copy, but I cannot be sure. By "copy", I mean something like strcpy is happening internally. And std:string doesn't end up with a pointer to the same char* internally it was passed.
const char *somestring = ...
std::string str;
str.assign(somestring);
// or
str = somestring; //in my impl, op= calls to assign(const char*)