简述enable_share_from_this的作用
时间: 2023-08-05 19:09:26 浏览: 144
`enable_shared_from_this` 是 C++ 标准库提供的一个模板类,用于解决在某个类中获取自身的 `shared_ptr` 的问题。它的作用是允许一个对象在拥有 `shared_ptr` 的情况下,安全地获取到指向自身的 `shared_ptr`。
当一个类继承自 `enable_shared_from_this` 时,它就可以调用 `shared_from_this()` 成员函数来获取指向自身的 `shared_ptr`。这样可以确保在多个 `shared_ptr` 共享同一个对象时,不会因为对象被删除而导致悬空指针问题。
使用 `enable_shared_from_this` 的步骤如下:
1. 继承自 `enable_shared_from_this<T>`,其中 `T` 是派生类的类型。
2. 在需要获取自身的地方,调用 `shared_from_this()` 成员函数。
以下是一个示例代码:
```cpp
#include <iostream>
#include <memory>
class MyClass : public std::enable_shared_from_this<MyClass> {
public:
std::shared_ptr<MyClass> getShared() {
return shared_from_this();
}
};
int main() {
std::shared_ptr<MyClass> obj1 = std::make_shared<MyClass>();
std::shared_ptr<MyClass> obj2 = obj1->getShared();
std::cout << "obj1 use count: " << obj1.use_count() << std::endl;
std::cout << "obj2 use count: " << obj2.use_count() << std::endl;
return 0;
}
```
在这个示例中,`MyClass` 继承自 `enable_shared_from_this<MyClass>`,在 `getShared()` 函数中调用了 `shared_from_this()` 返回了一个指向自身的 `shared_ptr`。通过使用 `shared_ptr` 来管理对象的生命周期,可以确保在 `obj2` 存在时,`obj1` 不会被释放,从而避免了悬空指针问题。
需要注意的是,`enable_shared_from_this` 要求对象必须通过 `shared_ptr` 进行管理,否则会导致未定义行为。同时,不要在析构函数中使用 `shared_from_this()`,以避免潜在的问题。
阅读全文