當(dāng)把子類對(duì)象的指針賦值給父類時(shí),不需要cast。shared_ptr也這樣, 比如:
class A

{
public:
A();
virtual ~A();
};
class B: public A

{
public:
B();
virtual ~B();
};
typedef shared_ptr<A> APtr;
typdef shared_ptr<B> BPtr;
BPtr pB(new B());
APtr pA = pB;
這是期望的行為。繼續(xù):
class C

{
public:
C();
~C();

const APtr& GetB() const
{ return m_pB; }
private:
BPtr m_pB;
};

問題出在哪里?
---------------------------------------------
m_pB轉(zhuǎn)換為APtr類型時(shí),產(chǎn)生臨時(shí)對(duì)象。C::GetB()返回的是臨時(shí)對(duì)象的引用。
一般情況下,沒人會(huì)寫這樣的程序。返回臨時(shí)對(duì)象的引用時(shí)候,編譯器也會(huì)有warning。假如,忽略了warning,就有可能發(fā)生杯具。

