此代码是否会导致内存泄漏?

use*_*339 2 c++ memory-leaks

我很好奇,如果这段代码导致内存泄漏可能是由于我在第4行删除它之前将指针重新分配给第3行?

谢谢.

1. int y = 12;
2. int *pt = new int;
3. pt = &y;
4. delete pt; 
Run Code Online (Sandbox Code Playgroud)

Jos*_*eld 8

它不仅泄漏了动态分配的内容,int而且还有未定义的行为,因为您delete不能使用new(§5.3.5/ 2)未分配的对象.

操作数的值delete可以是空指针值,指向由前一个新表达式创建的非数组对象的指针,或指向表示此类对象的基类的子对象(1.8)的指针(第10条) .如果不是,则行为未定义.

由于表示的对象y未分配new-expression,因此您无法使用delete它来销毁它.它的寿命取决于其范围.

  • @ user2054339一般情况下你应该小心指针.原始指针类型对它所指向的对象的生命周期几乎没有说明.更喜欢使用更清晰的智能指针. (2认同)
  • @ user2054339这样可行,但它很可怕.更好:`int p1; int p2;`甚至不担心重新分配. (2认同)