我对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
的存在是为了自动处理所有这些事情,因此当最后一个共享指针离开作用域时,对象将被销毁。 - Dietrich Epp