std::enable_shared_from_this有什么意义?进来告诉你

之前我一直不知道std::enable_shared_from_this有什么意义,官方的解答是传递自身的智能指针,但我也一直没用到,都是以第三者的身份管理和传递其他类型的智能
但是,直到我看到了一篇知乎的帖子,上面是这么说的:

需求: 在类的内部需要自身的shared_ptr 而不是this裸指针
场景: 在类中发起一个异步操作, callback回来要保证发起操作的对象仍然有效.

但是我自己测试了一下,对象销毁后再调用对象成员函数发现用std::enable_shared_from_this获取指针的时候就会抛出异常。起初觉得并没有什么用,但我转念一想,抛出异常。那就直接捕获异常呗,这样就可以第一时间捕获异常并处理。这样就可以知道我们的对象是否有效了(用this的情况下存在可能不抛出异常的情况)。也就知道在异步过程中调用的对象有效性!

struct A : public std::enable_shared_from_this<A> {
	~A() {
		std::cout << "析构" << std::endl;
	}
	void func() {
		try {
			try {
				auto self = shared_from_this();
				std::cout << self.use_count() << std::endl;
			}
			catch (...) {
				throw 1;
			}
			// 其他代码块, 可以抛出其他类型的异常,便于检查错误信息
		}
		catch (int type) {
			if (type == 1) {
				std::cout << "参数无效" << std::endl;
			}
		}
		catch (std::exception e) {
			std::cout << e.what() << std::endl;
		}
	}
};

int main() {
	{
		std::shared_ptr<A> a;
		a = std::make_shared<A>();
		{
			std::thread temp([&] {
				Sleep(1000);
				a->func();
				}
			);
			temp.detach();
		}
		std::cout << a.use_count() << std::endl;
	}
	while (true) {}
}

学会记得点个赞哦

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值