c++ - 删除动态分配的内存的最佳做法是什么?
问题描述
我必须重新分配iScreen
并oScreen
多次使用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);
解决方案
如果可以,请考虑将动态对象保存在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
您不必删除旧的,智能指针会在您分配新的时自动执行。
推荐阅读
- firebase - 服务器密钥(用于旧协议)- 授权您的应用服务器访问 Google 服务。意义?
- angular - ng-select 不显示 bindLabel 值
- php - 生成给定范围内的 IPv6 地址列表
- javascript - 切换选项卡时第二个选项卡的内容未正确初始化
- javascript - Laravel 中的 JQuery 已导入但无法正常工作
- android - 为什么我的 Gradle 脚本中的变量没有定义?
- html - html 以 100% 宽度将 2 列合并为 1 引导程序 2
- php - 将数组中的数据相乘
- sql - 用更多列重新组织新表中的多行
- angular - 无法在 Ionic4 中检查我的滑块是否已到达最后一张幻灯片