2011-10-06 48 views
4

我的一些同事喜欢在构造函数初始化列表中明确地初始化std::auto_ptr0,但是它的构造函数中将被初始化为0而不需要任何显式的初始化。那么是否有任何理由去做?我应该显式地初始化auto_ptr吗?

#include <memory> 

class A 
{ 
    A() : SomePtr(0) 
    { 
    } 

private: 
    std::auto_ptr<SomeType> SomePtr; 
}; 
+0

可能的重复[是否有任何需要分配空指针到std :: auto_ptr](http://stackoverflow.com/questions/3664145/is-there-any-need-to-assign-null-pointer- to-stdauto-ptr) –

回答

9

不,std::auto_ptr默认构造函数正是这么做的,这样它明确地是没有必要的。无论如何,这是一个风格问题,你应该保持一致。例如,你会显式调用构造函数初始化列表中的成员向量的默认构造函数吗?

作为一个方面说明,std::auto_ptr在即将到来的标准

+4

“即将到来”的标准已经发生,现在是“最新”的标准! Hoorah,欢呼!当然,它还没有*实施*。 –

+2

可能应该提到unique_ptr是替换 –

+0

好吧,唯一的原因是样式和一致性。 – ks1322

0

心理学​​已被弃用。

对于内置类型,您可能已经知道它们是未初始化的,除非您明确这样做。对于课程而言,情况并非如此。

A力求一致性结果在各处显式初始化。这允许您忘记A::SomePtr是内置类还是类类。相当无用,恕我直言,因为内置类型的数量非常有限。

0

一个原因可能是清晰的,但应该是唯一的原因。我自己宁愿不写不必要的初始化,特别是如果这完全避免了为周围的类编写默认构造函数并让编译器完成它的工作。尽管这只是一个风格问题,但我认为太多偏执狂甚至会损害代码的清晰度。

相关问题