如何将char*转换为boost :: shared_ptr?

ttt*_*ttt -7 c++ boost

我有一个普通的指针char *,如何转换char *boost::shared_ptr

char *str = "abcdfg";
boost::shared_ptr<char> ss = ?(str);
Run Code Online (Sandbox Code Playgroud)

pad*_*ddy 6

您无法将字符串文字转换为共享指针.让我只是"纠正"你的代码,然后你剩下的就是未定义的行为:

const char *str = "abcdfg";
boost::shared_ptr<char> ss(str);
Run Code Online (Sandbox Code Playgroud)

现在,这将编译,但它会产生严重的问题,因为str不是动态分配的内存.一旦共享指针被破坏,您将获得未定义的行为.

所以,如果你想要那个字符串,你必须先复制它:

const char *str = "abcdfg";
boost::shared_ptr<char> ss( new char[std::strlen(str)+1] );
std::strcpy( ss.get(), str );
Run Code Online (Sandbox Code Playgroud)

但是,如果您只是为了在字符串上使用RAII语义,为什么不std::string首先使用?

std::string sss( str );
Run Code Online (Sandbox Code Playgroud)