std::enable_shared_from_this有什么意义?进来告诉你
大约 1 分钟
之前我一直不知道 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) {}
}
学会记得点个赞哦