两个智能指针指向同一个地址
int* a = new int(5);
shared_ptr<int> ptr = shared_ptr<int>(a);
shared_ptr<int> ptr2 = ptr; // 引用计算数会增加是可以的。unique_ptr不能这么操作
shared_ptr<int> ptr3 = shared_ptr<int>(a) // 引用计数各为1, 任意一个离开作用域都会导致内存释放。
shared_ptr本身是线程安全的,即引用计数和对象的删除是线程安全的,
管理的对象线程安全性靠自己保证
Myclass {
pricate:
shared_ptr<int> a;
}
Myclass * class_1 = new Myclass;
Myclass* class_2 = class_1;
计数依然是1
Myclass* class_3 = new Myclass;
shared_ptr<int> p = class_3;
delete class_3;
std::cout << p.getrefrencecout; // = 1
// 内存数据依然存在,可以访问,直到p释放,内存随之结束,并非随着类析构而消失(重要)
智能指针 = nullptr 或者reset 都是将计数减去1
类所掌握的智能指针会在类释放时自动计数-1,不必重复的在析构中-1