4

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

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

我发现使用 unique_ptr 的效果特别好。例如:

std::unique_ptr<SOMETYPE[]> someArrayName

并使用:

someArrayName(new SOMETYPE[someLargeSize])

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

4

1 回答 1

5

使用std::unique_ptr将需要使用分配new[]。这从来不是(或几乎从来没有)最好的解决方案。在这种情况下,只需使用std::vector. 在 C++11 之前,通过&array[0], array.size(); 在 C++11 中,你可以更清楚,并通过 array.data(), array.size(). (这还有一个优点是您不必特殊情况下的空向量。)

于 2013-07-25T16:44:38.573 回答