簡體   English   中英

派生類和智能指針

[英]Derived classes and smart pointers

class Object { /* */ };

和一些派生的:

class Derived1 : public Object { /* */ };
class Derived2 : public Object { /* */ };

我有一個函數,它生成派生對象並返回Object指針;

Object *make()
{
   return new Derived1();
}

所以,這種方式我必須通過智能指針包裝返回的對象,但要使用什么返回類型?

TYPE? make()
{
   return boost::shared_ptr<Derived1>(new Derived1());
}

您可以使用:

boost::shared_ptr<Object> make()
{
return boost::shared_ptr<Object>(new Derived1());
}

從邏輯上講,自然轉換將是boost::shared_ptr<Object>但如果函數總是返回Derived1那么最好返回boost::shared_ptr<Derived1>以便客戶端可以利用更好的靜態類型信息,如果他們想要。

為什么原始函數必須丟棄靜態類型信息?

答案很簡單:

boost::shared_ptr<Object> make()
{
   return boost::shared_ptr<Derived1>(new Derived1());
}

因為智能指針保存指針屬性wrt類型轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM