enable_shared_from_this
时间: 2023-06-09 20:03:16 浏览: 111
enable_shared_from_this 是 C++11 新增的一个模板类,用于在类自身内部获取自身对象的 std::shared_ptr 智能指针,避免出现自身对象被 delete 后,还继续存在其他对该对象的指针,从而导致程序出错的情况。它提供了一个成员函数 shared_from_this(),可以返回一个指向当前类对象的 std::shared_ptr 智能指针。该函数只能在某个已经管理了当前类对象的 std::shared_ptr 对象中调用,否则会抛出 std::bad_weak_ptr 异常。
相关问题
enable_shared_from_this用法
enable_shared_from_this是一个模板类,它提供了一个函数shared_from_this,用于获得一个指向当前对象的shared_ptr。它的用法是,在类定义中继承enable_shared_from_this,并在本类中保存一个weak_ptr指向自身,然后通过shared_from_this获取该对象的shared_ptr。使用shared_ptr管理对象的好处是,可以预防内存泄漏和空悬指针的问题。但是需要注意的是,对象必须通过shared_ptr创建,否则使用shared_from_this将会出现未定义行为。
怎么使用enable_shared_from_this
使用enable_shared_from_this需要遵循以下步骤:
1. 定义一个类并继承自std::enable_shared_from_this<T>
2. 在类的构造函数中,将this指针传递给std::shared_ptr<T>对象。
3. 在需要使用shared_from_this()的地方,调用该函数,并将返回值赋值给一个std::shared_ptr<T>对象。
以下是一个示例代码:
```
#include <memory>
#include <iostream>
class MyClass : public std::enable_shared_from_this<MyClass>
{
public:
MyClass(int val) : m_val(val) {}
std::shared_ptr<MyClass> getShared()
{
return shared_from_this();
}
int getValue() const
{
return m_val;
}
private:
int m_val;
};
int main()
{
std::shared_ptr<MyClass> ptr1(new MyClass(10));
std::shared_ptr<MyClass> ptr2 = ptr1->getShared();
std::cout << "ptr1 value: " << ptr1->getValue() << std::endl;
std::cout << "ptr2 value: " << ptr2->getValue() << std::endl;
return 0;
}
```
在这个例子中,我们定义了一个名为MyClass的类,这个类继承自std::enable_shared_from_this<MyClass>。在类的构造函数中,我们将this指针传递给std::shared_ptr<MyClass>对象。在getShared()函数中,我们调用shared_from_this()函数,并将返回值赋值给一个std::shared_ptr<MyClass>对象。
最后,我们创建了两个std::shared_ptr<MyClass>对象,一个是直接使用new操作符创建的,另一个是通过getShared()函数获取的。我们输出了这两个对象的值,可以看到它们都指向同一个对象,并且该对象的值为10。这说明了两个std::shared_ptr<MyClass>对象共享同一个对象。
阅读全文