2012-05-23 5 views
0

Можно ли получить возвращаемое значение от dynamic_pointer_cast по ссылке или может вызвать проблему?Получить shared_ptr по ссылке с dynamic_pointer_cast

struct A 
{ 
}; 

struct B : public A 
{ 
}; 

int main() 
{ 
    shared_ptr<A> b = make_shared<B>(); 
    auto &a = dynamic_pointer_cast<A>(b); 
    //auto a = dynamic_pointer_cast<A>(b); 

    return 0; 
} 
+0

Вопрос в таком: почему вы хотите получить ссылку? –

+0

Таким образом, счетчик ссылок не увеличивается – Merni

+1

Это приведет к поражению цели использования умного указателя, потому что вы представите возможность оборванной ссылки. – rubenvb

ответ

2

Даже если были возможно, он не будет делать то, что вы хотите:

[Цель состоит в том, что] счетчик ссылок не увеличивается

Это все равно будет увеличен с dynamic_pointer_cast возвращает shared_ptr копия в любом случае.

Ваш код не работает, поскольку ссылка будет привязана к временному объекту, возвращенному dyanamic_pointer_cast, и это запрещено.

Использование const ссылки будет работать (с const& разрешено связываться с временным), но результатом все равно будет тем же: литой бы создать новый экземпляр shared_ptr и увеличивают счетчик ссылок.

Смежные вопросы