如果我的内部类是我自己的vector<char>
版本(我控制源代码),并且为了示例我不能将其更改为std::string
是否有办法窃取来自std::string
的内存,就像std::string
的移动构造函数一样。
这样的事情:
std::string str{"abcdefghijklmnopqrstu"};
MyVectorCharClass mvc(std::move(str)); // Constructor takes memory from str
我想我听说过将.release()
添加到std::string
或std::vector
的未来提案,但我在谈论现在的时间。
答案 0 :(得分:6)
没有。 std::string
管理的缓冲区对其是私有的。您可以通过&str[0]
访问它,但string
仍将拥有它,并在超出范围时销毁它。你无法告诉str
它现在拥有不同的缓冲区,或者将其底层缓冲区设置为nullptr
,或任何其他方式使其不 {{1那个缓冲区。
那是delete
的工作。它拥有缓冲区并且它不会放弃它。