概述
(1)理解share的意义,多个智能指针可以共享一份内存空间(通常是new出来的类实例)。
(2)体现在shared_ptr的use_count()计数上,每多一个智能指针指向该内存资源,计数就加1,每结束一个智能指针则计数减1。
(3)当use_count()为0时,意味着没有任何智能指针指向申请的内存空间,那么就回收此内存资源。
详细解释见代码注释
代码
#include"iostream"
#include<mutex>
using namespace std;
//辅助类
template<typename T>
class counter
{
private:
T* ptr; //指向内存资源的指针
int cnt; //计数,统计有多少SharePtr拥有此资源
mutex mx;
public:
counter(T* p) :ptr(p), cnt(1) {
};
~counter()
{
delete ptr;
}
int AddCnt()
{
mx.lock();
cnt++;
mx.unlock();
return cnt;
}
int DecCnt()
{
mx.lock();
cnt--;
mx.unlock</