#include <memory>
#include <iostream>
using namespace std;
//shared_ptr<void>;
//默认构造使计数为1.
//拷贝构造使复制链上所有shared_ptr的计数加一.
//移动构造使旧对象的指针赋值到新对象,旧对象的指针域复位,复制链上的计数保持不变。
//析构函数使指针计数自减一,当自减为零时释放指针。
//weak_ptr<void>;
//旨在解决shared_ptr的循环引用问题。
//构造weak_ptr不会增加复制链上的指针计数。
class demoClass {
public:
weak_ptr<demoClass> wpt;
shared_ptr<demoClass> spt;
demoClass()
{
cout << "demoClass.demoClass" << endl;
}
~demoClass() {
cout << "demoClass.~demoClass" << endl;
}
explicit demoClass(void* i)
{
cout << "demoClass.explicit demoClass(void* i)" << endl;
}
};
int main() {
{//作用域1
shared_ptr<demoClass> sp_demo(new demoClass);
sp_demo->wpt = sp_demo;//构造weak_ptr后计数为1
}//析构sp_demo,计数减一为0,demoClass指针不被释放
cout << "-------分隔线---------" << endl;
{//作用域2
shared_ptr<demoClass> sp_demo(new demoClass);
sp_demo->spt = sp_demo;//拷贝后计数为2
}//析构sp_demo,计数减一为1,demoClass指针不被释放
}
/*
demoClass.demoClass
demoClass.~demoClass
-------分隔线---------
demoClass.demoClass
*/
C++ shared_ptr类 weak_ptr类
于 2023-04-03 16:45:40 首次发布