如何初始化类的指针数组?

时间:2018-06-04 13:28:02

标签: c++ c++11

给定类(例如,名称为X),我想分配这样的数组:
X** array=new X*[20];

让我们看看以下功能:

void Func(){  
  X** array=new X*[2];  
  X[0]=& X(5);
  X[1]=& X(3);
}  

可以这样做,或者我必须使用new吗?

1 个答案:

答案 0 :(得分:2)

事情是,当你做这样的事情时:

X foo(5);
X[0] = &foo;

(我想你想说的是什么)

X[0]将采用foo的地址,这是一个只存在于函数范围内的局部变量。如果我不告诉废话,不编译。 (-fpermissive

所以在你的函数的最后一条指令之后,这个指针的用法将是Undefined

在分配后,您无法确定数据内容是否等于nullptr如果尚未初始化)。初始化语法有不同的行为,取决于语言,编译器,星标位置等(只是开玩笑的最后一个)所以请务必阅读有关它的文档。 但是,您可以确保通过使用零初始化来初始化具有null Value的内容。 Link here

如果您不想动态分配指针数组,请确保这些指针在对象的生命周期内仍然有效

另一种解决方案可能是动态分配它们。

X[0] = new X(5);