我编写了一个类,它必须与一些旧代码接口,这些代码需要一些C风格的数组(或者至少是指向第一个元素的指针)作为参数。
这些数组是我的类的成员,它们特别大(50kb)所以我想将它们放在堆上,以便我的类的对象在堆栈上不是很大。我非常相信使用资源管理对象,所以我宁愿不自己在堆上管理这些数组。
我发现使用unique_ptr特别适合这项工作。例如:
std::unique_ptr<SOMETYPE[]> someArrayName
并使用:
someArrayName(new SOMETYPE[someLargeSize])
在我的构造函数的初始化列表中。这允许我使用.get()
方法将这些作为常规C数组用于需要作为参数的函数,而我不必自己管理内存。但我刚刚意识到我的同事(实际编译我们的代码版本的人)仍然在VS2008上,显然缺乏对像unique_ptr
这样的C ++ 0x功能的支持。首先,我目前使用unique_ptr的解决方案是一个好的解决方案吗?如果是这样,是否有替代品来维持我需要的所有行为,比如boost?
答案 0 :(得分:5)
使用std::unique_ptr
需要使用new[]
进行分配。
这绝不是(或几乎从不)最好的解决方案。在这
例如,只需使用std::vector
。在pre-C ++ 11中,传递&array[0],
array.size()
;在C ++ 11中,你可以更清楚,并通过
array.data(), array.size()
。 (这也具有以下优点:
你没有特殊情况下的空载体。)