2012-05-23 2 views
0

dynamic_pointer_cast에서 반환 값을 얻는 것이 좋습니까? 아니면 문제가 될 수 있습니까?dynamic_pointer_cast를 사용하여 shared_ptr을 참조하십시오.

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_castshared_ptr 사본을 반환하기 때문에 여전히 증가 할 것입니다.

참조가 dyanamic_pointer_cast에 의해 반환 된 임시 개체에 바인딩되고 이것이 금지되어 있으므로 코드가 작동하지 않습니다. 캐스트가 shared_ptr새로운 인스턴스를 생성하고 참조 카운트를 증가 것이다 : (const&가 임시로 결합 할 수 있기 때문에)하지만 결과는 여전히 같은 것 일 것 const 참조를 사용

.

관련 문제