shared_from_this()
时间: 2023-04-26 07:00:12 浏览: 46
shared_from_this()是C++中的一个函数,用于在一个类中获取指向自身的shared_ptr指针。它只能在继承自enable_shared_from_this类的对象中使用,因为它需要访问enable_shared_from_this类中的成员变量。使用shared_from_this()可以避免手动创建shared_ptr指针,从而更加方便和安全地管理内存。
相关问题
enable_shared_from_this
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需要遵循以下步骤:
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>对象共享同一个对象。