是否可以从 std::string 中获取内存(就像 string move ctor 那样)?
Is it possible to take memory from std::string(like string move ctor does)?
如果我的内部 class 是我自己的 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
的未来提议,但我说的是现在。
没有。 std::string
管理的缓冲区是它私有的。您可以通过 &str[0]
访问它,但 string
仍将拥有它并在它超出范围时销毁它。您无法告诉 str
它现在拥有一个不同的缓冲区,或将其基础缓冲区设置为 nullptr
,或任何其他方式使其成为 not delete
那个缓冲区。
那是 std::string
的工作。它拥有自己的缓冲区并且不会放弃它。
如果我的内部 class 是我自己的 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
的未来提议,但我说的是现在。
没有。 std::string
管理的缓冲区是它私有的。您可以通过 &str[0]
访问它,但 string
仍将拥有它并在它超出范围时销毁它。您无法告诉 str
它现在拥有一个不同的缓冲区,或将其基础缓冲区设置为 nullptr
,或任何其他方式使其成为 not delete
那个缓冲区。
那是 std::string
的工作。它拥有自己的缓冲区并且不会放弃它。