我想要一个由复制构造函数初始化的堆栈分配数组。
我只看到在堆上分配内存或使用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
只复制每个元素。复制指针是一种肤浅的复制。