怎么使用enable_shared_from_this
时间: 2023-09-14 09:06:26 浏览: 121
shared_from_this() in Constructor:直接替换std :: shared_ptr + std :: enable_shared_from_this-开源
5星 · 资源好评率100%
使用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>对象共享同一个对象。
阅读全文