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