[英]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::vector
或std::array
。
释放数组的唯一正确方法是使用delete[]
delete
释放的单个对象,而delete[]
释放对象的数组。 没有诸如delete[][]
或delete[][][]
看起来您想要一个数组数组。
我认为,最易读的方式是使用类型别名。
typedef char PlayerName[50];
PlayerName* playerNewNames = new PlayerName[numPlayers];
delete [] playerNewNames;
如果您想要一个指向数组的指针数组,则需要进行迭代,但是由于您希望所有“内部”数组都具有相同的大小,并且在编译时就知道了,所以这似乎是个坏主意。
并了解std::vector
和std::array
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.