boost:scoped_ptr,带有接受char*作为输入类型的遗留C函数
boost:scoped_ptr with legacy C functions that takes char* as input type?
我是boost库的新手,现在开始在我的新项目中探索它。我想了解从BOOST scoped_ptr是如何工作的?到目前为止,我们在所有代码中都使用原始指针,我建议使用smartpointer来简化内存管理。我们的编程不是纯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以来会发生什么?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>;
现在你确实可以分配错置指针了,而且很好:
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`
相关文章:
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 当我输入字符类型的数字时,为什么我无法获得整数?
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 需要有关运行具有输入类型的编译器的帮助
- 如何在 CPP 中检查给定输入的数据类型?
- 将空格作为单字符数据类型的输入?
- 在函数中使用运算符重载,在 c++ 中使用 const 类型输入参数
- 有没有办法将输入类型包装到C++中的模板类?
- 如果输入类型与目标类型不同,"cin"变量是否重置为某个默认值?
- 函数重载并根据相同的输入返回不同的数据类型
- C++ 从用户那里获取未知数据类型输入
- C 异质容器,作为类型输入
- 如何在无效的数据类型输入后继续循环
- WSDLPull 使用复杂类型输入
- 使用std::cin (c++)检查有效的类型输入
- 为已定义的变量传递错误的类型输入
- 如何验证数据类型输入
- c++中的混合数据类型输入