C++11中enable_shared_from_this的用法解
**C++11 中 `enable_shared_from_this` 的用法解析**
在 C++11 中,`std::shared_ptr` 和 `std::weak_ptr` 成为了智能指针的首选选择。其中,`std::shared_ptr` 可以自动管理对象的生命周期,而 `std::weak_ptr` 则可以安全地访问一个已经被 `std::shared_ptr` 管理的对象。
然而,在某些情况下,我们需要从一个原始指针(如 `T*`)中创建一个 `std::shared_ptr`。这就是 `enable_shared_from_this` 的作用,它提供了一种机制,让我们可以从一个原始指针中创建一个 `std::shared_ptr`。
**什么是 `enable_shared_from_this`?**
`enable_shared_from_this` 是一个 trait 类,位于 `
**如何使用 `enable_shared_from_this`?**
要使用 `enable_shared_from_this`,我们需要在我们的类中继承它:cppclass MyClass : public std::enable_shared_from_this
这样,我们就可以在我们的类中添加一个 `shared_from_this()` 方法,这个方法会返回一个 `std::shared_ptr` 指向当前对象。
**示例代码**cpp#include <memory>
#include <iostream>
class MyClass : public std::enable_shared_from_this<MyClass> {
public:
MyClass() { std::cout << "MyClass constructed." << std::endl; }
~MyClass() { std::cout << "MyClass destroyed." << std::endl; }
void doSomething() {
// 从原始指针中创建一个std::shared_ptr auto sharedPtr = std::shared_from_this();
std::cout << "Doing something with shared_ptr..." << std::endl;
}
};
int main() {
// 创建一个MyClass对象 MyClass obj;
// 从原始指针中创建一个std::shared_ptr auto sharedPtr = std::shared_from_this(&obj);
// 使用std::shared_ptr sharedPtr->doSomething();
return0;
}
在这个示例代码中,我们定义了一个 `MyClass` 类,它继承自 `std::enable_shared_from_this
**注意事项**
* 当你使用 `std::shared_from_this()` 时,请确保当前对象已经被 `std::shared_ptr` 管理。如果没有,会导致未定义行为。
* 如果你的类有多个继承链(如 `class A : public B, public C`),请确保所有父类都继承自 `std::enable_shared_from_this
总之,`enable_shared_from_this` 是一个非常有用的 trait 类,它可以帮助我们从原始指针中创建一个 `std::shared_ptr`。通过使用它,我们可以更安全地访问和管理对象的生命周期。