Ada*_*dam 1 c++ new-operator delete-operator
如果我做类似的事情:
void foo() {
bar* b2 = new bar();
b2 = new bar();
}
Run Code Online (Sandbox Code Playgroud)
用 初始化的第一个柱值会发生什么new
?是被第二次赋值覆盖,还是应该事先使用delete关键字删除?
这是内存泄漏。C++ 已经为你的对象分配了空间,然后你失去了对它的所有引用,所以它会坐在那里,让你的程序的其余部分运行时变得无用且占用空间。
这就是为什么在 C++ 中通常不喜欢使用new
.
void foo() {
bar b2 = bar();
b2 = bar();
}
Run Code Online (Sandbox Code Playgroud)
特别是在您只想在 1 个范围内使用变量的情况下,将其分配在堆栈上是一个更安全的选择。尤其是在出现异常的情况下,
Foo foo = new Foo();
...
delete foo;
Run Code Online (Sandbox Code Playgroud)
不安全,如果...
抛出异常怎么办?你泄漏!如果您想要 C++11 中的安全性和指针语义
unique_ptr<bar> b2;
Run Code Online (Sandbox Code Playgroud)
如果你真的想要指针语义。现在,当所有引用都b2
丢失时,它将自行删除。注意:循环仍然没有损坏和泄漏。
归档时间: |
|
查看次数: |
1352 次 |
最近记录: |