主要是我可以:
Node* myNodeArray2[myHeight][myWidth];//Does not call constructor
for(int i=0; i<myHeight; i++){
for(int j=0; j<myWidth; j++){
theNodeArray[i][j] = new Node("ThisIsTest", 5, 5);
}
}
因此,对于上面的代码,myHeight和myWidth可以在运行时输入用户。它不会调用默认构造函数,我可以使用new运算符并通过创建对象的数组。
我希望能够将Node * myNodeArray2传递给函数,并让它创建数组大小并填充它。创建它时,我希望元素成为指针。我不想调用默认构造函数。我希望能够在我选择时使用非默认构造函数调用new运算符。
当我尝试:
void Test(Node*& theNodeArray, int myHeight, int myWidth){
theNodeArray = new Node*[myHeight][myWidth];
}
int main(){
Node* myNodeArray;
Test(myNodeArray, myHeight, myWidth);
}
我明白了
“myWidth不是一个常量表达式。”
我尝试了几种不同的方法,却无法得到我想要的东西。我需要在单独的函数中进行创建。我需要能够在运行时定义大小。有什么帮助吗?
编辑:
我不想使用std :: vector。
编辑2:
我不想这样做
int** ary = new int*[sizeX];
for(int i = 0; i < sizeX; ++i)
ary[i] = new int[sizeY];
因为这会强制行为连续内存空间的对象。我想分配一个2d指针数组。我不想创建将被指向的对象。
答案 0 :(得分:1)
您可以使用以下内容:
Node*** MakeArrayNodePtr(int myHeight, int myWidth){
Node*** res = new Node**[myHeight];
for (int i = 0; i != myHeight; ++i) {
res[i] = new Node*[myWidth]();
}
return res;
}
别忘了
void DeleteArrayNodePtr(Node*** nodes, int myHeight, int myWidth)
{
for (int i = 0; i != myHeight; ++i) {
// And probably:
/*
for (int j = 0; j != myWidth; ++j) {
delete nodes[i][j];
}
*/
delete [] nodes[i];
}
delete [] nodes;
}