gpt4 book ai didi

c++ - 将 char* 交给 std::string 进行管理(最终释放内存)

转载 作者:太空宇宙 更新时间:2023-11-04 15:16:24 31 4
gpt4 key购买 nike

我必须使用一个库函数,它为生成的字符串分配一点内存并返回一个 char*,期望调用者最终使用 free() 释放内存

// Example declaration of the library function:
char* foo();
// ...
// Example usage:
auto foo_str = foo();
// ...
free(foo_str);

是否可以从这个指针构造一个 std::string,将内存的所有权传递给字符串对象,以便在字符串被破坏时释放它?我知道我可以实现我自己的包装器来提供这种 RAII 行为,但我猜这个轮子已经被发明过一次了。

最佳答案

不,你不能使用 string 来做这样的事情。 string 始终拥有自己的缓冲区,并将分配和释放自己的缓冲区。您不能将所有权转移字符串中。我什至不知道是否有这样的建议。

一个您可以将所有权转移到其中的容器:unique_ptr :

struct free_deleter {
void operator()(void* p) {
free(p);
}
};

std::unique_ptr<char, free_deleter> foo_str = foo();

关于c++ - 将 char* 交给 std::string 进行管理(最终释放内存),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075394/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com