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

时间:2013-09-18 20:21:08

标签: c++ arrays pointers constructor initialization

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

class xyz{};
cin>>M;

xyz *a=new xyz[M];   //this will call the constructor for each object.

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

我希望M + 1和M + 2&th;这个术语由接受参数的不同构造函数初始化。

2 个答案:

答案 0 :(得分:4)

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.这当然不是一个安全的假设,您必须决定如何处理不合格的案例。

答案 1 :(得分: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而不是创建手动数组。