用于动态分配数组的unique_ptr替代方案

unique_ptr alternative for dynamically allocated array

本文关键字:ptr 方案 unique 动态分配 数组 用于      更新时间:2023-10-16

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

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

我发现使用unique_ptr来实现这一点效果特别好。例如:

std::unique_ptr<SOMETYPE[]> someArrayName

和使用:

someArrayName(new SOMETYPE[someLargeSize])

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

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