将新值分配给变量时泄漏内存?

Pep*_*kki 4 c++ memory pointers memory-leaks new-operator

是的,我是那些正在学习来自Java的C++的人之一,被自动垃圾收集器宠坏了.有一种特殊的情况,我想知道我是否在泄漏记忆.我们在C++中考虑一下:

bool *test = new bool(false);
test = new bool(true);
delete test;
Run Code Online (Sandbox Code Playgroud)

我在这里泄漏记忆吗?或者我应该delete在分配新值之前先打电话?像这样:

bool *test = new bool(false);
delete test;
test = new bool(true);
delete test;
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我第一个是正确的,因为指针test指向内存中的相同地址,并为其变量分配新值,不会更改此地址.或者new运营商是否在内存中分配了不同的地址?任何人都可以给我一个线索,或者我是否一起弄错了?

Nim*_*Nim 6

是的,你正在泄漏,而c ++的方法是:

bool test = false;
test = true; 

// ta-da - no leak.
Run Code Online (Sandbox Code Playgroud)

你可以采取第二种方法 - 但你可能会画很多皱眉......

  • @amit很好,对于内置类型我会坚持使用Nim的选项. (2认同)
  • @amit在我看来,更有可能是来自引用计数,垃圾收集,"新的一切"Java,OP不习惯用于声明局部变量的惯用C++方式. (2认同)

sha*_*oth 5

是的,确切地说,delete在覆盖地址之前必须这样做.或者更好的是在堆栈上分配或使用智能指针.