c++ - 指向由库返回的包装数组的智能指针

标签 c++ boost stl smart-pointers visual-c++-2005

我正在运行 VC++ 2005,所以 std::unique_ptr 不可用 AFAIK。我使用一些库函数(黑盒)来有效地执行 return new T[n] 并且我想将结果包装在某个对象中,这意味着我不必在我的析构函数中删除它们。

大约 VC++ 2008 的标准库中是否存在任何内容?如果不是,unique_ptr 的 boost 版本是否会像 this answer 中那样完美工作? ?

为了澄清注释中的一些混淆,库函数返回一个指向动态分配数组的原始指针,我无权更改它...我需要获取该指针并将其包装在一个自动对象中当对象超出范围时调用 delete []

最佳答案

在 2011 年之前的标准库中,您拥有的只是 auto_ptr,它适合从函数返回。但是,它仅适用于单个对象,不适用于数组,因此不适合这种用途。

据我所知,Boost 中没有 unique_ptr。有一个 scoped_ptrscoped_array,但它们不可转移,因此不能从函数返回。

boost::shared_array 可能是合适的,尽管它使用引用计数,因此与单一所有权指针相比具有(希望很小的)开销。

std::vector 可能是一个不错的选择;只要您的编译器支持“返回值优化”,那么您就可以(稍微小心)从函数返回一个,而无需任何不必要的内存分配或复制。但是,它的缺点是不能防止意外复制数据。

更新:我刚刚注意到您问题中的“黑匣子”一词,我认为这可能意味着库函数返回原始指针,并且您想将它们分配给一个智能指针,该智能指针将使用 delete [],不能自己修改函数。如果是这样的话,boost::scoped_array应该做到这一点,并向因回应我的评论而删除答案的人道歉。

关于c++ - 指向由库返回的包装数组的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11518817/

相关文章:

c++ - 如何在 C++ win32 中写入文件? (对比 2010)

c++ - 将 boost::asio 集成到基于文件描述符的事件循环中(选择/轮询)

c++ - boost::uuid/unique 跨不同数据库

c# - 编码(marshal)结构后跟固定大小的数据

c++ - 为什么这个cin读取卡住了?

c++ - 是否可以将 boost 累加器与 vector 一起使用?

c++ - 如何一一删除STL deque的所有元素?

c++ - Radix/Patricia Trie 的 STYLish 下界函数

c++ - 如何实现 set::find() 以仅匹配一对中的键?

c++11 多读取器/多写入器队列,使用原子处理对象状态和永久递增索引