gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:26 25 4
gpt4 key购买 nike

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

// 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 创建的。

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

因此,这个对象需要被deleted。

在您理解并完全围绕这个概念思考之后,您的下一步将是打开您的 C++ 书到讨论 std::unique_ptrstd 的章节: :shared_ptr 类,它将为您处理这些讨厌的细节。你应该学习如何使用它们。现代 C++ 代码很少需要 delete 某些东西;而是这些智能指针完成了所有工作。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com