C++ 用于动态分配阵列的唯一\u ptr替代方案

C++ 用于动态分配阵列的唯一\u ptr替代方案,c++,arrays,boost,unique-ptr,C++,Arrays,Boost,Unique Ptr,我编写了一个类,它必须与一些旧代码接口,这些代码需要一些C样式的数组(或者至少是指向第一个元素的指针)作为参数 这些数组是我的类的成员,它们特别大(50kb),所以我想把它们放在堆上,这样我的类的对象在堆栈上就不会很大。我非常相信使用资源管理对象,所以我不希望自己在堆上管理这些数组 我发现使用unique_ptr进行此操作特别有效。例如: std::unique\u ptr someArrayName 并使用: someArrayName(新的SOMETYPE[someLargeSize]) 在

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

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

我发现使用unique_ptr进行此操作特别有效。例如:

std::unique\u ptr someArrayName

并使用:

someArrayName(新的SOMETYPE[someLargeSize])


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

使用
std::unique\u ptr
需要使用
new[]
进行分配。 这从来不是(或几乎从来不是)最好的解决方案。在这个 在这种情况下,只需使用
std::vector
。在C++11之前的版本中,传递
&数组[0],
array.size()
;在C++11中,您可以更清晰,并通过
array.data()、array.size()
。(这还具有以下优点:
您不必使用特殊的空向量。)

那么
std::vector
呢?(您可以将
&v[0]
传递到遗留接口)
std::vector
就是为了这个目的而存在的,它比C++11更老。我同意我基本上是在尝试模仿std::vector的优点,同时保持与需要指向数组的指针的函数的兼容性。如果我使用std::vector,那么将它输入到需要C样式数组的对象中的最佳方法是什么?编辑:看起来@R.MartinhoFernandes为我错过的这件事提出了一些建议。那么,使用&v[0]是解决这个问题的正确方法吗?Boost也有
独特的\u ptr
。@lanteau正如R.MartinhoFernandes所说,
&v[0]
(其中
v
是一个
std::vector
)。@lanteau随你怎么想。与使用
new[]
相比,您有更多的选项,但您也可以完全按照使用
new[]
所做的操作,指定大小,然后分配给每个元素。谢谢,这实现了我想要的行为。