2016-04-07 85 views
2

如果class Bclass A導出,可我dynamic_cast一個shared_ptr<B>shared_ptr<A>,並從shared_ptr<A>shared_ptr<B>鑄造smartpointers基類

我只問自己,因爲用dynamic cast你可以用類似於instanceof的東西來做Java。我問自己這是否也適用於smart_ptr

+0

相關:http://stackoverflow.com/questions/19932629/implicit-conversion-的共享-PTR –

回答

4

對於從派生類轉換爲基類的特定情況,可以使用賦值運算符爲您執行必要的隱式轉換。對於另一個方向,您可以使用dynamic_pointer_cast。

#include <memory> 

struct A { virtual ~A() = 0; }; 
struct B: A { }; 

void example() 
{ 
    // derived to base 
    std::shared_ptr<B> b; 
    std::shared_ptr<A> a = b; 

    // base to derived 
    std::shared_ptr<A> a2; 
    std::shared_ptr<B> b2 = std::dynamic_pointer_cast<B>(a2); 
} 

http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast更多信息在鑄造過程中 - 有等同於所有通常的嫌疑人好像reinterpret_pointer_cast