给定类(例如,名称为X
),我想分配这样的数组:
X** array=new X*[20];
让我们看看以下功能:
void Func(){
X** array=new X*[2];
X[0]=& X(5);
X[1]=& X(3);
}
可以这样做,或者我必须使用new
吗?
答案 0 :(得分:2)
事情是,当你做这样的事情时:
X foo(5);
X[0] = &foo;
(我想你想说的是什么)
X[0]
将采用foo的地址,这是一个只存在于函数范围内的局部变量。如果我不告诉废话,不编译。 (-fpermissive
)
所以在你的函数的最后一条指令之后,这个指针的用法将是Undefined
在分配后,您无法确定数据内容是否等于nullptr
(如果尚未初始化)。初始化语法有不同的行为,取决于语言,编译器,星标位置等(只是开玩笑的最后一个)所以请务必阅读有关它的文档。
但是,您可以确保通过使用零初始化来初始化具有null Value的内容。 Link here
如果您不想动态分配指针数组,请确保这些指针在对象的生命周期内仍然有效
另一种解决方案可能是动态分配它们。
X[0] = new X(5);