总是删除指针,即使它只是在函数调用堆栈中?
函数栈释放时它不消失了吗?

// just Simple class
class CSimple{
  int a;
}

// just simple function having pointer.
void simpleFunc(){
  CSimple* cSimple = new CSimple();
  cSimple->a = 10;
  //.. do sth
  delete cSimple;  // <<< Always, do I have to delete 'cSimple' to prevent the leak of memory?
}

void main(){
  for( int =0 ; i< 10 ; i++){
     simpleFunc();
  }

}

最佳答案



函数返回时,“CSimple * csimple”确实消失了。

但是,指针与其指向的对象之间存在很大差异。

当指针对象被销毁时,指针所指向的内容都不会发生任何变化。这里不仅有一个,而且还有两个对象:

  • 指针。
  • 它指向的是什么。

  • 在这种情况下,指针指向动态范围内由new创建的对象。

    该对象什么也不会发生,否则,您将泄漏内存。

    因此,此对象需要为delete d。

    了解并充分理解这个概念之后,下一步就是打开C++书籍,进入有关std::unique_ptrstd::shared_ptr类的章节,这将为您解决这些令人讨厌的细节。您应该学习如何使用它们。现代C++代码很少需要delete一些东西。这些智能指针可以完成所有工作。

    关于c++ - 即使指针在函数堆栈中,我也必须删除它吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41411878/

    10-11 01:03