c++ - 即使指针在函数堆栈中,我是否也必须删除它?

标签 c++

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

// 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();
  }

}

最佳答案

when function stack released?

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

但是,指针和它所指向的内容之间存在很大差异。

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

  1. 指针。

  2. 它指向什么。

在本例中,指针指向动态作用域中使用 new 创建的对象。

这个对象不会发生任何事情,否则,你会泄漏内存。

因此,需要删除该对象。

在您理解并完全理解这个概念后,您的下一步将是打开您的 C++ 书籍,阅读讨论 std::unique_ptrstd 的章节: :shared_ptr 类,它将为您处理这些烦人的细节。您应该学习如何使用它们。现代 C++ 代码很少需要删除某些内容;相反,这些智能指针完成了所有工作。

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

相关文章:

c++ - C++ 是 "waste of time"吗?

c++ - 如何正确使用 std::function 作为谓词

c++ - 从模板化类中提取类型

c++ - 没有对基类的匹配函数调用

c++ - 如何解决我的 C++ 头文件中的大量错误?

c++ - 什么决定了C++程序中对象销毁的顺序?

C++ 实现具有多级继承的对象相等性

c++ - 防止不同数据类型的重复代码 (uint16_t/uint32_t)

c++ - 不同的文件有不同的范围吗?