我仍然不明白C++运算符 new[](或新[][])

I still don't understand C++ operator new[] (or new[][])

本文关键字:或新 new 运算符 明白 C++      更新时间:2023-10-16

我通常会避开不必要的 c++ 特性,但随着时间的推移,我无法避免面对我的小问题。最近的是operator new[]和潜在的内存问题。

char *playerNewNames = new char[numPlayers][50];

很高兴知道我们不需要那么多指针*间接,我对C迭代malloc很有信心,但上面的步骤似乎太远了。我的编译器没有抱怨,但我想确保我将得到一个大小为numPlayers的数组,每个数组索引50个字符。我该如何释放这个呢?

我将尝试delete[][],但即使这不会抛出它不是100%明显,它将清理一切,没有迭代在我的部分。有人能解释一下吗?

char *playerNewNames = new char[numPlayers][50];是一个错误。您应该得到一个编译器错误。正确的语法是:

char (*playerNewNames)[50] = new char[numPlayers][50];

和删除它:

delete[] playerNewNames;
然而,一个更好的选择是不使用c风格的数组,也不使用new。相反,应该使用为您管理内存的容器类,例如std::vectorstd::array

释放数组的唯一正确方法是使用delete[]

delete释放单个对象,而delete[]释放一个对象数组。没有delete[][]delete[][][]这类东西

看起来你想要一个数组的数组。

在我看来,最易读的方法是使用类型别名。

typedef char PlayerName[50];
PlayerName* playerNewNames = new PlayerName[numPlayers];
delete [] playerNewNames;

如果你想要一个数组指针的数组,你将需要迭代,但由于你希望所有的"内部"数组具有相同的大小,并且它在编译时是已知的,这似乎是一个坏主意。

了解std::vectorstd::array