我是新來的shared_ptr's,我試圖弄清楚.reset()函數的確切功能。在std :: 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;
}
somehere主:
shared_ptr<SomeClass> mainObject;
mainObject = returnThis();
確實mainObject有2的使用次數,因爲someObject是在一個函數創建的,但決不能清除?或者它是一個,並在返回值時自動完成清理?
哎呀!如果您想要詢問後續問題,請使用頁面頂部的「問題問題」按鈕。小故事是'shared_ptr'存在自動處理所有這些東西,所以當* last *共享指針離開作用域時,該對象被銷燬。 –