【问题标题】:What is best practice to delete dynamically allocated memory?删除动态分配的内存的最佳做法是什么?
【发布时间】:2021-07-24 07:13:51
【问题描述】:

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

我发现在重新分配新的堆内存之前,我必须每次都 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);

【问题讨论】:

  • 在我看来,最佳实践是将所有动态分配的对象保存在某种拥有容器中。主要是std::vectorstd::unique_ptr
  • 退后一步。为什么要用new关键字多次重新分配iScreenoScreen
  • 真的需要重新分配*iScreen = Matrix(150, 150);吗?

标签: c++ dynamic-memory-allocation new-operator heap-memory delete-operator


【解决方案1】:

如果可以,请考虑将动态对象保存在 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 2013-12-27
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2018-07-24
    相关资源
    最近更新 更多