总是删除指针,即使它只是在函数调用堆栈中?
函数栈释放时它不消失了吗?
// 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_ptr
和std::shared_ptr
类的章节,这将为您解决这些令人讨厌的细节。您应该学习如何使用它们。现代C++代码很少需要delete
一些东西。这些智能指针可以完成所有工作。关于c++ - 即使指针在函数堆栈中,我也必须删除它吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41411878/