c++ - 我还是不明白 C++ operator new[] (or new[][])

标签 c++ new-operator

我通常回避不必要的 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

关于c++ - 我还是不明白 C++ operator new[] (or new[][]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25282542/

相关文章:

c++ - 如何在没有删除运算符的情况下为堆对象调用析构函数?

C++动态声明的数组无法工作

c++ - Number Base 转换和数字访问?

c++ - C++ 中的惰性求值

c++ - 如何递归元组?

C++ pragma GCC system_header 指令

c++ - 如果在类模板中使用,fstream 是否会在编译期间通过读写访问硬盘驱动器?

c++ - 如何阻止重载的 new() 从 C++/Linux 中的 Ostream 调用?

c++ - 为什么两个指针具有相同的内存地址?

c++ - new(std::nothrow) int[n] 抛出异常