C++ 在基类中使用std::enable_shared_from_this

C++ 在基类中使用std::enable_shared_from_this,c++,c++11,C++,C++11,我希望有一个从std::enable_shared_this私有继承的基类。但是,当我尝试在派生类中创建一个指向对象的共享指针时,编译器直接从\u this中找到std::enable\u shared\u中的构造函数,因此失败,因为它是一个不可访问的基 下面的示例无法在g++5.2.1上编译 #include <memory> class Foo : private std::enable_shared_from_this<Foo> { //... }; c

我希望有一个从std::enable_shared_this私有继承的基类。但是,当我尝试在派生类中创建一个指向对象的共享指针时,编译器直接从\u this中找到std::enable\u shared\u中的构造函数,因此失败,因为它是一个不可访问的基

下面的示例无法在g++5.2.1上编译

#include <memory>

class Foo : private std::enable_shared_from_this<Foo>
{
    //...
};

class Bar : public Foo
{
    //...
};

int main()
{
    std::shared_ptr<Bar> spBar(new Bar);
    return 0;
}
问题出在Foo,而不是酒吧。下面的程序给出了相同的错误

我认为您必须从std::enable_shared_中公共继承

为了不从_中公开共享的_,您可以使其在整个层次结构中可见,或者使其仅在类内部显式可见:

#include <memory>

class Foo : public std::enable_shared_from_this<Foo>
{
private:
    using std::enable_shared_from_this<Foo>::shared_from_this;
};    

有趣的因此,没有办法从这里启用共享_仅用于私人用途?我确认clang++3.5.0、stdlib++和libc也存在同样的问题++
#include <memory>

class Foo : private std::enable_shared_from_this<Foo>
{
    //...
};

class Bar : public Foo
{
    //...
};

int main()
{
    //std::shared_ptr<Bar> spBar(new Bar);
    std::shared_ptr<Foo> spBar(new Foo);
    return 0;
}
#include <memory>

class Foo : public std::enable_shared_from_this<Foo>
{
private:
    using std::enable_shared_from_this<Foo>::shared_from_this;
};