正在使用复制构造函数初始化堆栈上的数组



我想要一个由复制构造函数初始化的堆栈分配数组。

我只看到在堆上分配内存或使用std::array的方法。

对于std::array,它看起来如下:

class A
{
std::array<int, 5> my_array;    // I would like to have int my_array[5]; instead of the std::array
int size;
public:
A(const A& p)
: my_array{ p.my_array }, size(p.size) {}
}

如果没有std::array<int,5>,但使用普通数组(int my_array[5];(,我如何实现这一点?我已经在代码的注释中添加了这一点。

目前,数组包含整数。如果它包含一个类B,它还包含一个指针:

class B
{
int* my_ptr;
}

std::array是否正确处理此问题并执行深度复制?

数组不能在C++中进行复制初始化。您可以:

  • 分配循环中的每个成员,即构造函数主体中的std::copy
  • 或者将数组封装在类中,并使用生成的复制构造函数。在标准库中有一个用于此类包装器类的模板。这是你已经知道的std::array

当然,类本身是数组的包装器,因此您可以简单地不使用用户定义的复制构造函数,而是使用隐式生成的复制构造函数:

struct A
{
int my_array[5];
int size;
};

如果它包含,比如说一个类B,它也包含一个指针。。。std::数组正确处理这个吗

是。

。。。并执行深度复制?

否。复制std::array只复制每个元素。复制指针是一种肤浅的复制。

最新更新