首页 > 解决方案 > 删除动态分配的内存的最佳做法是什么?

问题描述

我必须重新分配iScreenoScreen多次使用new关键字。

我发现delete在重新分配新的堆内存之前,我必须每次都给他们。

这对我来说似乎是不好的做法。有没有更好的方法来解决这个代码重复?

Matrix* oScreen;
Matrix* iScreen;

iScreen = new Matrix(100, 100);
oScreen = new Matrix(100, 100);

//do something with iScreen, oScreen

delete iScreen; // have to write same "delete iScreen" every single time?
iScreen = new Matrix(150, 150);
delete oScreen;
oScreen = new Matrix(150, 150);

标签: c++dynamic-memory-allocationnew-operatorheap-memorydelete-operator

解决方案


如果可以,请考虑将动态对象保存在std::vector 之类的容器中。否则,它们应该由像std::unique_ptr这样的智能指针管理。

std::unique_ptr<Matrix> iScreen;

iScreen = std::make_unique<Matrix>(100, 100);

// do something with iScreen

iScreen = std::make_unique<Matrix>(150, 150); // no need to delete

您不必删除旧的,智能指针会在您分配新的时自动执行。


推荐阅读