繁体   English   中英

我仍然不了解C ++运算符new [](或new [] [])

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

我通常会避免使用不必要的 C ++ 功能,但是随着时间的推移,我无法避免遇到我的怪物。 最重要的是operator new[]和潜在的内存问题。

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

很高兴知道我们不需要那么多的指针*间接调用,并且我对使用malloc进行C迭代充满信心,但是上述步骤似乎太过分了。 我的编译器没有抱怨,但我想确定自己将得到一个大小为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM