std::enable_shared_from_this<TBASE>
'dan özel olarak devralan bir taban sınıfına sahip olmak istiyorum. Ama sonra türetilmiş bir sınıftaki bir nesneye paylaşılan bir işaretçi oluşturmaya çalıştığımda, derleyici std::enable_shared_from_this<TBASE>
yapıcı için düz gider ve erişilemez bir taban olarak başarısız olur.Temel sınıflarında std :: enable_shared_from_this kullanma
Aşağıdaki örnek, bir ben Bar
içinde belirtebilirsiniz yolu erişilemez shared_ptr
kurucusunu kullanmak denemek için değil var mı 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;
}
üzerine derlenmeyecektir?
g ++ hatadır:
In file included from /usr/include/c++/5/bits/shared_ptr.h:52:0,
from /usr/include/c++/5/memory:82,
from example.cxx:1:
/usr/include/c++/5/bits/shared_ptr_base.h: In instantiation of ‘std::__shared_ptr<_Tp, _Lp>::__shared_ptr(_Tp1*) [with _Tp1 = Bar; _Tp = Bar; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]’:
/usr/include/c++/5/bits/shared_ptr.h:117:32: required from ‘std::shared_ptr<_Tp>::shared_ptr(_Tp1*) [with _Tp1 = Bar; _Tp = Bar]’
example.cxx:15:39: required from here
/usr/include/c++/5/bits/shared_ptr_base.h:887:36: error: ‘std::enable_shared_from_this<Foo>’ is an inaccessible base of ‘Bar’
__enable_shared_from_this_helper(_M_refcount, __p, __p);
İlginç. Bu nedenle, "private_from_this" işlevini yalnızca özel kullanım için etkinleştirmenin bir yolu yok mu? – jaw
Ben stdlib ile ++ ve libc'nizdeki ile ++ ben clang aynı sorunu teyit böylece (3.5.0) – max66
sanmıyorum ++ – max66