2
如果class B
從class A
導出,可我dynamic_cast
一個shared_ptr<B>
到shared_ptr<A>
,並從shared_ptr<A>
到shared_ptr<B>
?鑄造smartpointers基類
我只問自己,因爲用dynamic cast
你可以用類似於instanceof
的東西來做Java。我問自己這是否也適用於smart_ptr
。
如果class B
從class A
導出,可我dynamic_cast
一個shared_ptr<B>
到shared_ptr<A>
,並從shared_ptr<A>
到shared_ptr<B>
?鑄造smartpointers基類
我只問自己,因爲用dynamic cast
你可以用類似於instanceof
的東西來做Java。我問自己這是否也適用於smart_ptr
。
對於從派生類轉換爲基類的特定情況,可以使用賦值運算符爲您執行必要的隱式轉換。對於另一個方向,您可以使用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
等
相關:http://stackoverflow.com/questions/19932629/implicit-conversion-的共享-PTR –