gpt4 book ai didi

c++ - boost:scoped_ptr 带有以 char* 作为输入类型的遗留 C 函数?

转载 作者:行者123 更新时间:2023-11-28 05:25:23 26 4
gpt4 key购买 nike

我是 boost 库的新手,现在开始在我的新项目工作中探索它。我想了解 BOOST 的 scoped_ptr 是如何工作的?到目前为止,我们在所有代码中都使用原始指针,我建议使用智能指针来简化内存管理。我们的编程不是纯粹的C++语言,而是它的集成应用语言。例如,我们试图了解如何将 scoped_ptr 初始化为 NULL 并将原始指针传递给应用程序 API。考虑下面的代码

这是来自应用程序工具包的 API,它接受这样的参数

int SOME_API_FUNC(int obj, const char* prop, char** cValue);

我无法更改 API,因为它尚未发布。

现在参数 cValue 是我们要使用智能指针的地方,以便内存管理自动化,因为 API 会为其动态分配一些内存并分配一个值并返回。

我们试过像这样声明 scoped_ptr

boost::scoped_ptr<char*> pcValue(new char*());

并在 API 中使用,例如

SOME_API_FUNC(obj, prop,&*cValue);

我的问题是,如果此 cValue 在 API 内部使用 malloc 分配,那么自从 scoped_ptr 使用 delete 后会发生什么? 删除是否会正确清理内存?如何验证内存是否已正确清理?

最佳答案

您应该使用带有可自定义删除器的智能指针。

例如如果您需要使用 free 而不是 delete (默认删除器)释放该指针,请尝试:

struct free_deleter {
template <typename T> void operator()(T* p) const {
::free(p);
}
};
template <typename T> using malloc_ptr = std::unique_ptr<T, free_deleter>;

现在您确实可以分配 malloced 指针并且没问题:

std::unique_ptr<char[]> a(new char[100]); // ok, uses `delete[]`
std::unique_ptr<MyType> b(new MyType("param")); // ok, uses `delete`

malloc_ptr<char> legacy_buf(static_cast<char*>(::malloc(100))); //ok, uses `::free`

关于c++ - boost:scoped_ptr 带有以 char* 作为输入类型的遗留 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40659826/

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