我写了一个类,它必须与一些需要一些 C 风格数组(或至少指向第一个元素的指针)作为参数的旧代码接口(interface)。
这些数组是我类的成员,它们特别大(50kb)所以我想把它们放在堆上,这样我类的对象在堆栈上就不会很大。我非常相信使用资源管理对象,所以我宁愿自己不在堆上管理这些数组。
我发现使用 unique_ptr 的效果特别好。例如:
std::unique_ptr<SOMETYPE[]> someArrayName
并使用:
someArrayName(new SOMETYPE[someLargeSize])
在我的构造函数的初始化列表中。这允许我使用 .get()
将它们用作常规 C 数组需要它作为参数的函数的方法,我不必自己管理内存。但我刚刚意识到我的同事(实际为发布编译代码的人)仍在使用 VS2008,显然缺乏对 C++0x 功能的支持,如 unique_ptr
.首先,我目前使用 unique_ptr 的解决方案是否是一个好的解决方案?如果是这样,是否有替代品来维持我在诸如 boost 之类的东西中需要的所有行为?
最佳答案
使用 std::unique_ptr
需要使用 new[]
进行分配。
这从来都不是(或几乎从来不是)最好的解决方案。在这个
情况下,只需使用 std::vector
。在 C++11 之前的版本中,传递 &array[0],
array.size()
;在 C++11 中,你可以更清楚,并通过
array.data(), array.size()
。 (这还有一个好处是
你不必特例空 vector 。)
关于c++ - 动态分配数组的 unique_ptr 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17863831/