在适当的范围内使用动态内存
Using dynamic memory in the proper scope
我觉得在应该使用的相同范围内使用new
是一个很好的做法delete
。跟踪内存要容易得多。例如,假设我有:
class Obj;
Obj* create() {
Obj* object = new Obj();
// do a bunch of messy work with object
return object;
}
int main() {
Obj* o = create();
}
上面代码的问题在于,需要释放o
并不是很明显。所以相反,我更愿意:
int main() {
Obj* o = new Obj();
// do a bunch of messy work with o
}
这样,我会记得delete
o
.但是,这也给我带来了问题。我目前正在做一个更大的项目,由于一堆语句可以很容易地组合在一个函数中,我的main()
开始看起来又大又乱。
那么,在处理较大的项目(或任何规模的项目(时,我应该使用哪种做法,即我应该在main()
中使用new
来更好地跟踪内存,但要付出混乱代码的代价,还是应该在函数中使用new
来获得更干净的代码,但在手动管理内存时稍微困难一些?
如果这个问题太具体或不像我想象的那么重要,我
您说得对,传递指针会使跟踪所有权变得困难。如果您有权访问 C++11,则可以返回 std::unique_ptr 来表达将所有权传递给调用方的意图。如果您只能访问 C++03 功能,则提升库也具有 boost::unique_ptr。
在适当的情况下使用 std::unique_ptr
std::shared_ptr
和 std::weak_ptr
还可以在异常处理发挥作用时简化内存管理(防止管理不善(。
使用 new
和 delete
在现代C++中几乎没有用处,除了编写自定义容器、分配器和其他较低级别的任务。
简而言之:尽可能使用智能指针,并在必要时使用手动内存管理。
最佳实践是永远不要直接使用new
- 使用为您管理内存的对象,例如std::string
和std::vector
,如果您真的需要类似指针的东西,请使用std::make_unique
和std::make_shared
来制作std::unique_ptr
或std::shared_ptr
对象...
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- c++ 动态内存 堆栈中的分配
- 给定特定内存地址的数组的动态内存分配
- 释放动态内存时C++错误
- 我刚刚了解了C++中的动态内存分配
- 无法删除布尔动态内存分配
- 有没有办法找到动态内存大小,比如大小?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 具有对齐存储的动态内存分配
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- 我应该在这个程序中使用静态内存分配还是动态内存分配
- C++ 模板函数中的动态内存分配
- 指向动态内存中结构中的变量时出现问题
- C++具有动态内存分配的 constexpr 函数
- 动态内存分配错误
- 按引用传递和动态内存分配之间的区别是什么