c++ - 动态分配数组的 unique_ptr 替代方案

标签 c++ arrays boost unique-ptr

我写了一个类,它必须与一些需要一些 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/

相关文章:

c++ - 在 C++ 中拥有多个指向单个对象的指针的正确方法是什么?

c++ - 生成一个没有重复数字的随机数?

c++ - segmentation 故障的常见原因的明确列表

c++ - 如何在 boost 图形库中使用 `randomize_property` 和捆绑属性图?

c++ - 使用 boost::numeric_cast<>

c++ - 以 .(点)为前缀的结构变量名称需要解释

C:很多关于char*的问题

javascript - 如何按日期属性将对象捆绑在数组中

java - 在数组中存储多种类型时,创建一个 Object 类型的数组还是创建一个新的 Class 是更好的 Java 实践?

C++11(或 Boost)system_error 策略