是否可以从std :: string中获取内存(就像字符串移动ctor一样)?

NoS*_*tAl 6 c++ move-semantics

如果我的内部类是我自己的版本vector<char>(我控制源)并且为了示例我不能改变它std::string是否有一种方法来窃取内存std::string,就像移动构造函数std::string一样.

所以像这样:

std::string str{"abcdefghijklmnopqrstu"};
MyVectorCharClass mvc(std::move(str)); // Constructor takes memory from str
Run Code Online (Sandbox Code Playgroud)

我想我听到的一些建议,未来要添加.release()std::stringstd::vector,但我说的是现在.

Bar*_*rry 6

不.std::string管理的缓冲区是私有的.您可以通过它访问它&str[0],但string仍然拥有它并在超出范围时将其销毁.你无法告诉str它现在拥有一个不同的缓冲区,或者设置它的底层缓冲区nullptr,或任何其他方式使它不是 delete那个缓冲区.

std::string是工作.它拥有缓冲区并且它不会放弃它.