可以说我有一个多态类结构类似的通smart_pointer来构造VS原始指针
class Base
{
//some implementation
};
class Deriv: public Base
{
//implementation
}
class Case1
{
boost::scoped_ptr<A> a_ //polymorphic data member owned by C
public:
Case1(A* a):a_(a)
{
}
};
class Case2
{
boost::scoped_ptr<A> a_ //polymorphic data member owned by C
public:
Case2(std::auto_ptr<A> a):a_(a.release())
{
}
};
而且我有一个三等功案例1/2拥有上述这些多态对象之一。现在我需要将一个指向Base/Deriv对象的指针传递给case1/2类的构造函数,该类取得了该对象的所有权。我是否应该将此对象作为智能指针传递给auto_ptr的,使之清楚,我要拿回这个对象的照顾,或允许原始指针(案例1)允许一个更简单的语法像
Case1 c(new Deriv);
//compared to
Case2 c(std::auto_ptr<Base>(new Deriv));
你的意思是在中间发生的完全零代码?我也不明白为什么它不能是暂时的。 – Puppy 2011-01-20 21:16:23
@DeadMG:零码在哪里?如果`Case1`构造函数在将原始指针参数分配给智能指针之前做了任何可能会引发异常的事件,则该对象将被泄漏。我已经添加了一个关于Herb Sutter的GOTW文章的链接。如果构造函数只有一个参数,这不是问题,但即便如此,大多数良好的编码风格(包括Boost指南)都建议为此指定所有智能指针。 – 2011-01-20 21:17:04