【发布时间】:2014-03-02 14:42:22
【问题描述】:
我是 shared_ptr 的新手,我正在尝试找出 .reset() 函数的确切功能。
#include <memory>
#include <stdio>
using namespace std;
class SomeClass{};
int main()
{
shared_ptr<SomeClass> sp (nullptr);
//do some stuff, sp now has 10 co-owners
cout << sp.use_count << endl;
sp.reset();
cout << sp.use_count << endl;
return 0;
}
会输出
10
0
所以自从我使用了重置功能后,所有实例都从内存中删除了吗?如,我刚刚用 sp 消除了任何可能的内存泄漏吗?显然这是我快速编造的一个玩具示例,如果有任何错误,请见谅。
跟进情况:
shared_ptr<SomeClass> returnThis() {
shared_ptr<SomeClass> someObject(new SomeClass(/*default constructor for example*/) );
return someObject;
}
这里主要是:
shared_ptr<SomeClass> mainObject;
mainObject = returnThis();
mainObject 的使用计数是否为 2,因为 someObject 是在函数中创建的,但从未被清除?或者是一个并且在返回值时自动完成清理?
【问题讨论】:
-
哎呀!如果您想提出后续问题,请使用页面顶部的“”按钮。简而言之,
shared_ptr的存在是为了自动处理所有这些事情,所以当 last 共享指针离开作用域时,对象就会被销毁。
标签: c++ memory memory-leaks shared-memory shared-ptr