[英]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.