Есть кусок кода:
A.cpp
class MySomeClass: public SomeClass
{
public:
void specificMethod();
}
class A
{
public:
A::A();
std::shared_ptr< B > m_bObject;
std::shared_ptr< MySomeClass > m_argument;
}
A::A()
{
m_argument= std::make_shared< MySomeClass >();
m_bObject = std::make_shared< B >( m_argument);
}
B.cpp
B::B(const std::shared_ptr< SomeClass >& smartOne):m_smartOne(smartOne)
{}
B::someMethod()
{
m_smartOne->specificMethod();
}
B.h
class B
{
public:
B(const std::shared_ptr< SomeClass >& smarOne);
void someMethod();
private:
const std::shared_ptr< SomeClass >& m_smartOne;
};
Проблема в том, что когда я вызываю m_bObject->someMethod()
, возникает дамп ядра, потому что m_smartOne
не MySomeClass
, а SomeClass
.
Почему? Это проблема с областью действия, проблема с владением или что-то еще?
Я получил код класса B
и не могу его изменить.
const std::shared_ptr< SomeClass >& m_smartOne;
Что за бред? - person T.C.   schedule 05.07.2017shared_ptr
по значению и много головной боли. - person T.C.   schedule 05.07.2017