gpt4 book ai didi

c++ - 我应该手动删除智能指针吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:45 28 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但我不确定答案。下面的代码读取一个文件,对于文件的每一行,通过“new”创建一个智能指针。如果以后要用到智能指针,就存储在一个列表中,否则不存储。

我的问题是:如果不存储智能指针,会不会造成潜在的内存泄漏?谢谢。

int main(){
.....;
std::list<SomeClass> aList;
while(inFile >> ss){
std::tr1::shared_ptr<SomeClass> aPtr(new SomeClass());
//do something in foo(aPtr) to aPtr,
//if aPtr will be used later, then it's stored in aList
//otherwise, it's not stored
foo(aPtr);
}
.....;
}

最佳答案

只要您将它与智能指针的拷贝一起存储,就不会泄漏内存。当 aPtr 对象从堆栈中掉出时(在每个 while 循环执行结束时),它将被销毁。如果它是分配对象的唯一持有者,它将删除它。但是,如果您在别处存储了 aPtr 的拷贝,那么它就不是分配对象的唯一持有者,也不会删除它。

关于c++ - 我应该手动删除智能指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6684591/

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