【发布时间】:2018-01-12 18:50:31
【问题描述】:
编辑:对不起大家,我不认为这个玩具示例真正反映了我的问题。我应该问的是是否有办法释放 std::string 对象的缓冲区。没有,这是有道理的。谢谢!
假设我有以下(损坏的)代码:
void get_some_data(MyCustomContainer& val)
{
std::string mystr = some_function();
val.m_data = &mystr[0];
}
这样不行,因为mystr指向的内存在get_some_data的末尾被释放了,val.m_data引用的内存就会失效。
如何告诉 std::string “不要在析构函数中释放内存缓冲区!” ?我不想复制数据。 MyCustomerContainer 对象将在其析构函数中处理内存释放。
【问题讨论】:
-
我闻到了XY problem。你到底想做什么?
-
你不能返回
std::string吗? -
使 m_data 成为 std::string。解决方案总是相同。
-
当您添加 SSO 时,这会变得有点复杂。您无法真正占用 SSO 缓冲区。
-
MyCustomerContainer 对象如何知道如何删除 std::string 的成员缓冲区?没有
std::string::oh_by_the_way_delete_this_buffer_for_me(m_data);可供使用。