派生类和智能指针

时间:2010-12-29 14:35:31

标签: c++ pointers boost 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());
}

3 个答案:

答案 0 :(得分:7)

你可以使用:

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

答案 1 :(得分:4)

逻辑上,自然转换将是boost::shared_ptr<Object>,但如果函数总是返回Derived1,那么最好返回boost::shared_ptr<Derived1>以便客户端如果他们愿意,可以利用更好的静态类型信息。

为什么原始函数必须丢弃静态类型信息?

答案 2 :(得分:2)

答案很简单:

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

因为智能指针保存指针属性wrt类型转换。