释放 std::vector 中指针内存的最有效方法是什么?
What's the most efficient way to free the memory of pointers in a std::vector?
我正在写一个扫雷舰克隆,我有一个std::vector<Cell *> minefield
。我用这种方式创建它的内容:
minefield.resize(cols * rows);
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j)
minefield[j + i * cols] = new Cell(j, i);
}
因此,为了避免内存泄漏,我需要稍后delete
主类(Game
(析构函数中的Cell
对象。最好(最有效(的方法是什么?
是吗
Game::~Game() {
for (int i = 0; i < minefield.size(); ++i)
delete minefield[i];
}
或者:
Game::~Game() {
for (auto it = minefield.begin(); it != minefield.end(); ++it)
delete *it;
}
或者:
Game::~Game() {
for (auto & m : minefield) // I'm not sure if the '&' should be here
delete m;
}
我确信您不需要这些动态分配。您可以将单元元素的分配和解除分配委托给std::vector。
尝试创建一个雷区类;矩阵视图";分配有CCD_ 5的线性数据。
#include <vector>
#include <iostream>
struct cell
{
std::size_t i, j;
bool mine;
};
class minefield
{
public:
minefield(int rows, int columns): cells(rows*columns), rowSize(columns)
{
std::cout << "just allocated std::vectorn";
}
virtual ~minefield()
{
std::cout << "about to free std::vectorn";
}
bool stepOn(std::size_t i, std::size_t j)
{
return cells.at(i*rowSize + j).mine;
}
void set(cell c)
{
cells[c.i*rowSize + c.j] = c;
}
private:
std::vector<cell> cells;
int rowSize;
};
void funct() {
minefield mf(5, 5);
mf.set(cell{0, 0, false});
mf.set(cell{0, 1, true});
if (not mf.stepOn(0, 0))
{
std::cout << "still alive :)n";
}
if (mf.stepOn(0, 1))
{
std::cout << "dead XPn";
}
}
int main()
{
funct();
std::cout << "bye!!n";
}
这应该打印:
刚刚分配了std::vector
仍然活着:(
失效XP
即将释放std::vector
再见!!
相关文章:
- 在C++中初始化向量映射的最有效方法
- 将此布尔值传递给此函数的最有效方法是什么?
- 比较C++变量的最有效方法
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 存储变量的更有效方法是什么?
- 确保套装新鲜度的有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在C++事务之间存储大量字符数据的有效方法
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 检查两个向量是否并行的最有效方法
- 从浮点数中删除小数部分但保留类型的有效方法
- 传递非泛型函数的最有效方法是什么?
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- 创建字符串数组的有效方法
- 返回一个引用C++中另一个类对象的对象的有效方法
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 从std::map值中获取密钥的有效方法