栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ shared

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ shared

总结

1. reset(),参数为空时,会释放shared_ptr所拥有的对象,释放后执行get()会返回false

2. reset(xx),参数不为空时会先释放原来拥有的对象,再获取新对象的所有权

3. get() 判断shared_ptr当前是否拥有对象

实验如下图

 代码如下

#include 
#include 
using namespace std;

class CTest 
{
public:
	CTest(int a);
	~CTest();
	void print() { cout << "value=" << val << endl; }
	void set(int a);
private:
	int val;
};

void CTest::set(int a)
{
	val = a;
}

CTest::CTest(int a) : val(a) {
	cout << "start val=" << val << endl;
}

CTest::~CTest() {
	cout << "end val=" << val << endl;
}

int main() 
{
	shared_ptr sp;  // empty

	CTest* p1 = new CTest(10);
	sp.reset(p1);	// 从p1获取所有权
	p1->set(3);
	sp->print();

	cout << "============ 1 =============" << endl;
	CTest* p2 = new CTest(20);
	sp.reset(p2);	// 先从p1放弃所有权(造成p1回收),再从p2获取所有权
	p1->print();	// 已被回收,打印出随机值
	sp->print();

	cout << "============ 2 =============" << endl;
	sp.reset();		// 放弃p2的所有权(造成p2回收)
	p2->print();	// 已被回收,打印出随机值
	//sp->print();  // 会崩溃
	
	cout << "============ 3 =============" << endl;
	// 未获取任何对象的所有权
	if (!sp.get()) 
	{
		cout << "empty" << endl;
	}

	getchar();
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号