我有一个困惑.以下是代码段.
我想使用new和创建一个包含五个类对象的动态数组,但我想运行一个循环来使用循环计数器分配构造函数的第一个参数.就像是.
class A {
public:
A(int _x, int _y):x(_x),y(_y) {}
private:
int x,y;
};
int main() {
A* a = new A[5]; //compiler error
for(i=0;i<5;i++) {
a[i] = A(i, 10);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我这是什么正确的语法,因为我没有一个简单的构造函数?
这条线
A* a = new A[5];
Run Code Online (Sandbox Code Playgroud)
要求A默认是可构造的.所以一个简单的选择是添加一个默认构造函数A:
A(): x(), y() {} // zero-initializes x and y
Run Code Online (Sandbox Code Playgroud)
请注意,在C++中,人们通常倾向于std::vector<A>在这种情况下使用.这需要所有的内存管理的情况下,所以没有必要调用new和delete明确.它也可以动态调整大小.这将构造一个std::vector<A>具有五个默认构造A对象:
std::vector<A> a(5);
Run Code Online (Sandbox Code Playgroud)
虽然您可能想要创建一个空的并在循环中将值推入其中.
std::vector<A> a;
for(i=0;i<5;i++) {
a.push_back(A(i, 10));
}
Run Code Online (Sandbox Code Playgroud)