从构造函数来你的新功能

来源:互联网 发布:mac windows bootcamp 编辑:程序博客网 时间:2024/06/03 09:25
在这种方式中,代码重复被保持到最小值。

同样,你可以在你想写一个函数来重新初始化一个班回到默认值的情况下,发现自己。因为你可能已经有了一个这样的构造函数,所以你可能会试图从你的成员函数中调用构造函数。然而,试图直接调用构造函数通常会导致意外的行为。许多开发人员只需在初始化函数中从构造函数中复制代码,这将起作用,但会导致重复的代码。在这种情况下,最好的解决办法是将代码从构造函数来你的新功能,并有构造函数调用你的函数来初始化数据工作:

class Foo{public:    Foo()    {        Init();    }     Foo(int value)    {        Init();        // do something with value    }     void Init()    {        // code to init Foo    }};

T是相当常见的包括()函数,初始化成员变量的默认值,然后让每个构造函数调用()函数之前做它的参数的具体任务。这最大限度地减少重复代码,允许您显式调用()从你喜欢的地方。
一个小警告:当使用()函数和动态分配的内存要小心。因为()函数可以被任何人在任何时间,动态分配的内存可能已被分配时,称为()。要妥善处理这种情况,它可以稍微混乱,因为一个非空指针可以是动态分配的内存或一个未初始化的指针!
委托构造函数在C++ 11
从C++ 11,构造函数可以调用其他构造函数。这个过程被称为委托构造函数(或构造函数链)。
有一个构造函数调用另一个,在成员初始化列表只需调用构造函数。这是一个直接调用另一个构造函数的情况下是可以接受的。适用于我们上面的例子:

12345678910111213141516class Foo{private: public:    Foo()    {        // code to do A    }     Foo(int value): Foo() // use Foo() default constructor to do A    {        // code to do B    } };


0 0