我需要帮助来理解enable_shared_from_this
。我对enable_shared_from_this
的使用感到有点困惑。
为了正确使用,我们考虑从http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
#include <memory>
#include <iostream>
struct Good: std::enable_shared_from_this<Good>
{
std::shared_ptr<Good> getptr() {
return shared_from_this();
}
};
struct Bad
{
std::shared_ptr<Bad> getptr() {
return std::shared_ptr<Bad>(this);
}
~Bad() { std::cout << "Bad::~Bad() called\n"; }
};
int main()
{
// Good: the two shared_ptr's share the same object
std::shared_ptr<Good> gp1(new Good);
std::shared_ptr<Good> gp2 = gp1->getptr();
std::cout << "gp2.use_count() = " << gp2.use_count() << '\n';
// Bad, each shared_ptr thinks it's the only owner of the object
std::shared_ptr<Bad> bp1(new Bad);
std::shared_ptr<Bad> bp2 = bp1->getptr();
std::cout << "bp2.use_count() = " << bp2.use_count() << '\n';
} // UB: double-delete of Bad
在上面的例子中
getptr()
致电gp1
shared_ptr
。std::shared_ptr<Good> gp2 = gp1->getptr();
std::shared_ptr<Good> gp2 = gp1;
例如:
Good gp; gp.getptr(); // throws std::bad_weak_ptr Good *gp1 = new Good(); gp1->getptr();// throws std::bad_weak_ptr
我的疑问是,当我们已经shared_ptr
时,我们也可以直接分配到另一个shared_ptr
。比如std::shared_ptr<Good> gp2 = gp1;
。
那么enable_shared_from_this
需要什么?
答案 0 :(得分:0)
shared_from_this()的一个更常见的用法是为被调用的函数提供调用类的shared_ptr
。因此,如果您需要为某个函数提供shared_ptr
实例,并且您确定要调用的类存储为shared_ptr
,那么您可以使用shared_from_this()
。基于您引用的伪代码示例:
struct Good: std::enable_shared_from_this<Good>
{
std::shared_ptr<Good> call_function() {
Foo foo;
foo.use_my_shared_ptr(shared_from_this());
}
};
Foo
这里只是一个需要shared_ptr到Good
的类。