【发布时间】:2021-05-26 22:52:38
【问题描述】:
我必须使用一个库函数,它为生成的字符串分配一点内存并返回 char*,期望调用者最终使用 free() 释放内存。
// Example declaration of the library function:
char* foo();
// ...
// Example usage:
auto foo_str = foo();
// ...
free(foo_str);
是否可以从这个指针构造一个std::string,将内存的所有权传递给字符串对象,以便在字符串被破坏时释放它?我知道我可以实现自己的包装器来提供这种 RAII 行为,但我猜这个轮子已经被发明过一次了。
【问题讨论】:
-
用你的原始指针创建一个
std::unique_ptr怎么样?还是 C++11 不是一个选项? -
unique_ptr不使用free()。它将使用某种形式的操作符删除。 -
@Peter
unique_ptr可以删除,但你想删除它。 -
@Michael 当然是
unique_ptr!我没有考虑到这一点而失败了。当然 C++11 是一个选项,我用它标记了这个问题:) -
啊,问这个问题一个多月后是-1。我希望对所需的 cmets 投反对票。