加到链建设者

来源:互联网 发布:ubuntu如何卸载qq 编辑:程序博客网 时间:2024/04/30 16:40

在使用()方法被认为是重复的代码更好的做法,它有几个缺点。首先,它是不可读的,因为它增加了一个新的功能和一些新的函数调用。第二,因为inita()不是一个构造函数,它可以正常程序流的过程中,称为成员变量,可能已经被设置和动态分配的内存可能已被分配。这意味着inita()需要被另外的复杂要正确处理好新的初始化和重新初始化的情况下

幸运的是C + + 11添加到建设者在一起的能力(称为委托构造函数

12345678910111213141516171819class Foo{public:    Foo()    {        InitA();    }     Foo(int nValue)    {        InitA();        // code to do B    }     void InitA()    {        // code to do A    }};

正如你所看到的这是非常干净

有一点要注意:你应该总是使用初始化列表语法时委托构造函数,编译器不支持委托构造函数一般将标志这一个编译错误。如果你试图从另一个构造函数体调用一个构造函数编译器不会抱怨你的程序也可能不会像预期的那样

12345678910111213class Foo{public:    Foo()    {        // code to do A    }     Foo(int nValue): Foo() // use Foo() default constructor to do A    {        // code to do B    }};


0 0