如果我这样做:
void foo() {
bar* b2 = new bar();
b2 = new bar();
}
用 new
初始化的第一个 bar 值会发生什么?是被第二次赋值覆盖,还是应该事先用delete关键字删除?
最佳答案
这是内存泄漏。 C++ 已经为您的对象分配了空间,然后您丢失了对它的所有引用,因此它将坐在那里,因为您的程序运行时的其余部分将变得无用且占用空间。
这就是为什么在 C++ 中通常不使用new
。
void foo() {
bar b2 = bar();
b2 = bar();
}
特别是在您只想在 1 个范围内使用变量的情况下,将其分配在堆栈上是一个更安全的选择。特别是在异常情况下,
Foo foo = new Foo();
...
delete foo;
不安全,如果...
抛出异常怎么办?你漏!如果你想要 C++11 中的安全和指针语义
unique_ptr<bar> b2;
如果你真的想要指针语义。现在,当所有对 b2
的引用都丢失时,它会自行删除。注意:循环仍然没有破裂和泄漏。
关于c++ - 覆盖使用 new 关键字初始化的变量 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075185/