我正在运行 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_ptr
和 scoped_array
,但它们不可转移,因此不能从函数返回。
boost::shared_array
可能是合适的,尽管它使用引用计数,因此与单一所有权指针相比具有(希望很小的)开销。
std::vector
可能是一个不错的选择;只要您的编译器支持“返回值优化”,那么您就可以(稍微小心)从函数返回一个,而无需任何不必要的内存分配或复制。但是,它的缺点是不能防止意外复制数据。
更新:我刚刚注意到您问题中的“黑匣子”一词,我认为这可能意味着库函数返回原始指针,并且您想将它们分配给一个智能指针,该智能指针将使用 delete []
,不能自己修改函数。如果是这样的话,boost::scoped_array
应该做到这一点,并向因回应我的评论而删除答案的人道歉。
关于c++ - 指向由库返回的包装数组的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11518817/