总是删除指针,即使它只是在函数调用堆栈中? 函数栈释放后不是就消失了吗?
// 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”就会消失。
但是,指针和它所指向的内容之间存在很大差异。
当指针对象被销毁时,指针所指向的任何内容都不会发生。这里不只有一个,而是两个对象:
指针。
它指向什么。
在本例中,指针指向动态作用域中使用 new
创建的对象。
这个对象不会发生任何事情,否则,你会泄漏内存。
因此,需要删除
该对象。
在您理解并完全理解这个概念后,您的下一步将是打开您的 C++ 书籍,阅读讨论 std::unique_ptr
和 std 的章节: :shared_ptr
类,它将为您处理这些烦人的细节。您应该学习如何使用它们。现代 C++ 代码很少需要删除
某些内容;相反,这些智能指针完成了所有工作。
关于c++ - 即使指针在函数堆栈中,我是否也必须删除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411878/