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

时间:2015-08-01 23:30:49

标签: 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

我想我听说过将.release()添加到std::stringstd::vector的未来提案,但我在谈论现在的时间。

1 个答案:

答案 0 :(得分:6)

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

那是delete的工作。它拥有缓冲区并且它不会放弃它。