c++ - 为什么我们使用 enable_shared_from_this 模板?

标签 c++ c++11 boost shared-ptr c++-standard-library

最近我遇到了std::enable_shared_from_this<T>模板,与它的 Boost 相同版本。
所以它描述了以下示例代码:

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_from_this();
    }
}

int main()
{
    shared_ptr<Y> p(new Y);
    shared_ptr<Y> q = p->f();
    assert(p == q);
    assert(!(p < q || q < p)); // p and q must share ownership
}

通过 f()? 创建 shared_ptr 的原因是什么?
shared_ptr<Y> p(new Y); 怎么了? ?

最佳答案

Whats wrong with shared_ptr p(new Y);?

它没有任何问题,唯一的问题是你可能没有在类 Y 的成员中使用它有时您希望成员返回 std::shared_ptr对自己。 std::shared_ptr<Y>( this )显然是一种错误的创建方式。

我想知道这样的例子是否可以使事情更清楚并且仍然足够简单:

std::shared_ptr<Y> Y::getObject() 
{
     return some_condition ? shared_from_this() : std::make_shared<Y>( somedata );
}

关于c++ - 为什么我们使用 enable_shared_from_this 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50235926/

相关文章:

c++ - 计算在编译时代码中引用了多少时间对象

c++ - 如何为 7z 存档格式写入二进制数据?

c++ - 如何在线性插值中找到坏点?

c++ - 改进替代解析器的使用

linux - ubuntu - 编译时找不到共享库

c++ - Qt 在 Painter 设备外绘图

c++ - 2D 群组碰撞检测

c++ - 如何生成与函数的数量一样多的参数?

c++ - 使用 Qt/C++ 从单独的线程发出对象时如何避免复制?

c++ - 由于对模板化类型的通用(前向)引用而无法实例化函数模板