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

C++(11):智能指针weak

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

C++(11):智能指针weak

智能指针weak_ptr可以指向shared_ptr类型的智能指针所指向的内存对象,但是不能直接对该内存对象进行访问:

int main(){

	shared_ptr sp1(new int(1));    //定义shared_ptr智能指针sp1
	weak_ptr wp1 = sp1;            //定义weak_ptr智能指针,指向sp1所指向的内存对象
	cout<<*wp1<')
	return 0;
}

不过weak_ptr有一成员函数lock,可以用于判断其指向的shared_ptr内存对象是否依然有效:

1.如果shared_ptr所指向内存对象仍然是一个有效的对象,也就是说引用计数没有变成0,对象没有被析构,那么该函数可以一个shared_ptr型的智能指针指向该内存对象;

2.如果shared_ptr所指向内存对象已经释放,则返回空指针nullptr。

#include 
#include 
using namespace std;

template
void shared_ptr_valid(shared_ptr &sp)
{
	weak_ptr wp = sp;
	shared_ptr spCheck = wp.lock();
	if(spCheck == nullptr)
	{
		cout<<"shared_ptr is invalid"< sp1(new int(1));
	shared_ptr_valid(sp1);        //输出:shared_ptr is valid
	shared_ptr sp2  = sp1;   //sp2与sp1共享同一个内存对象
	shared_ptr_valid(sp2);        //输出:shared_ptr is valid
	sp1.reset();                  //sp1释放自己对内存对象的访问
	shared_ptr_valid(sp1);        //输出:shared_ptr is invalid
	shared_ptr_valid(sp2);        //输出:shared_ptr is valid
	sp2.reset();                  //sp2释放自己对内存对象的访问
	shared_ptr_valid(sp2);        //输出:shared_ptr is invalid
	return 0;
}

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

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

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