unique_ptr替代动态分配的数组

时间:2013-07-25 16:37:18

标签: c++ arrays boost unique-ptr

我编写了一个类,它必须与一些旧代码接口,这些代码需要一些C风格的数组(或者至少是指向第一个元素的指针)作为参数。

这些数组是我的类的成员,它们特别大(50kb)所以我想将它们放在堆上,以便我的类的对象在堆栈上不是很大。我非常相信使用资源管理对象,所以我宁愿不自己在堆上管理这些数组。

我发现使用unique_ptr特别适合这项工作。例如:

std::unique_ptr<SOMETYPE[]> someArrayName

并使用:

someArrayName(new SOMETYPE[someLargeSize])

在我的构造函数的初始化列表中。这允许我使用.get()方法将这些作为常规C数组用于需要作为参数的函数,而我不必自己管理内存。但我刚刚意识到我的同事(实际编译我们的代码版本的人)仍然在VS2008上,显然缺乏对像unique_ptr这样的C ++ 0x功能的支持。首先,我目前使用unique_ptr的解决方案是一个好的解决方案吗?如果是这样,是否有替代品来维持我需要的所有行为,比如boost?

1 个答案:

答案 0 :(得分:5)

使用std::unique_ptr需要使用new[]进行分配。 这绝不是(或几乎从不)最好的解决方案。在这 例如,只需使用std::vector。在pre-C ++ 11中,传递&array[0], array.size();在C ++ 11中,你可以更清楚,并通过 array.data(), array.size()。 (这也具有以下优点: 你没有特殊情况下的空载体。)