使用两个不同的构造函数初始化指向数组的指针

initializing pointer to array with two different constructor

本文关键字:初始化 构造函数 指针 数组 两个      更新时间:2023-10-16

>我有一个程序,我想在其中使用指针初始化类对象数组。

class xyz{};
cin>>M;
xyz *a=new xyz[M];   //this will call the constructor for each object.

问题是我在 XYZ 类中有两个构造函数。 我想使用其他构造函数初始化最后两个元素,而不是没有参数的默认构造函数。我该怎么做?

我希望 M+1 和第 M+2 项由接受参数的不同构造函数初始化。

std::vector<xyz> a(M-2);
a.push_back(xyz(...));     // xyz(...) here is a call to the
a.push_back(xyz(...));     // constructor you want to use

此代码假定 M>= 2。 当然,这不是一个安全的假设,您必须决定如何处理不合格的情况。

首先,cin<<M是错误的。 应该是cin >> M. 确保您的插入和提取操作员指向正确的方向。

不能使用单个间接寻址。 new运算符将为数组中的每个对象调用默认构造函数。

如何实现目标的选项是:在所需的分配上复制所需的默认值,或创建指向对象的指针数组。

复制方法

xyz t(my_other_constructor);
xyz* a = new xyz[M];
a[M - 1] = t; // overwrite the default constructed value with the desired

双间接

xyz** a = new xyz*[M];
for (int i = 0; i < M - 1; ++i)
{
    a[i] = new xyz;
}
a[M - 1] = new xyz(my_other_constructor);

理想情况下,您将使用std::vector而不是创建手动数组。