C++ 像这样使用delete[]会导致内存泄漏吗?

C++ 像这样使用delete[]会导致内存泄漏吗?,c++,memory-management,dynamic-memory-allocation,C++,Memory Management,Dynamic Memory Allocation,我肯定以前有人问过这个问题,但搜索词让我无法了解我的具体情况。 基本上,我正在创建一个2D平铺引擎。为了整体效率和减少一点开销,我决定实现自己的简单内存管理容器 以下代码是我用来执行此操作的代码: 第h部分: Tile.cpp: 因此,通过查看每个磁贴是如何分配/释放的,可以安全地说这不会产生任何内存泄漏吗 如果会,在确保调用每个对象的析构函数的同时,释放此数组的最合适方法是什么?我是否应该在数组中循环,手动删除每个对象?您调用了new CTile[count]计数次数,每个m_tiles[l]

我肯定以前有人问过这个问题,但搜索词让我无法了解我的具体情况。 基本上,我正在创建一个2D平铺引擎。为了整体效率和减少一点开销,我决定实现自己的简单内存管理容器

以下代码是我用来执行此操作的代码:

第h部分:

Tile.cpp:

因此,通过查看每个磁贴是如何分配/释放的,可以安全地说这不会产生任何内存泄漏吗

如果会,在确保调用每个对象的析构函数的同时,释放此数组的最合适方法是什么?我是否应该在数组中循环,手动删除每个对象?

您调用了new CTile[count]计数次数,每个m_tiles[l]一次

因此,您需要为每个m_tile[l]调用delete[]计数次数

然而,尚不清楚计数有什么好处。对于阵列的两个层,应该使用nRows和ncolumn。现在已经分配了CTile的nRows*nRows*nColumns*nColumns实例,这可能太多了

相反,尝试

m_tiles = new CTile*[nRows];
您调用了新CTile[count]计数次数,每m_tiles[l]一次

因此,您需要为每个m_tile[l]调用delete[]计数次数

然而,尚不清楚计数有什么好处。对于阵列的两个层,应该使用nRows和ncolumn。现在已经分配了CTile的nRows*nRows*nColumns*nColumns实例,这可能太多了

相反,尝试

m_tiles = new CTile*[nRows];
为什么不这样做:

CTile* m_tiles;

m_tiles = new CTile[nRows*nColumns];

delete[] m_tiles;
为什么不这样做:

CTile* m_tiles;

m_tiles = new CTile[nRows*nColumns];

delete[] m_tiles;

&m_tiles[i]或m_tiles+i为您提供一个指针。由于new和delete非常昂贵,这将极大地提高性能,在意识到我误读了您的答案后,我收回了我的评论。这应该可以很好地工作,经过快速的内存转储后,我没有发现泄漏。我想我只是把事情复杂化了。&m_tiles[I]或m_tiles+I给你一个指针。由于new和delete非常昂贵,这将极大地提高性能,在意识到我误读了您的答案后,我收回了我的评论。这应该可以很好地工作,经过快速的内存转储后,我没有发现泄漏。我想我只是把事情复杂化了。
CTile* m_tiles;

m_tiles = new CTile[nRows*nColumns];

delete[] m_tiles;