在这种方式中,代码重复被保持到最小值。
T是相当常见的包括()函数,初始化成员变量的默认值,然后让每个构造函数调用()函数之前做它的参数的具体任务。这最大限度地减少重复代码,允许您显式调用()从你喜欢的地方。
一个小警告:当使用()函数和动态分配的内存要小心。因为()函数可以被任何人在任何时间,动态分配的内存可能已被分配时,称为()。要妥善处理这种情况,它可以稍微混乱,因为一个非空指针可以是动态分配的内存或一个未初始化的指针!
委托构造函数在C++ 11
从C++ 11,构造函数可以调用其他构造函数。这个过程被称为委托构造函数(或构造函数链)。
有一个构造函数调用另一个,在成员初始化列表只需调用构造函数。这是一个直接调用另一个构造函数的情况下是可以接受的。适用于我们上面的例子:
同样,你可以在你想写一个函数来重新初始化一个班回到默认值的情况下,发现自己。因为你可能已经有了一个这样的构造函数,所以你可能会试图从你的成员函数中调用构造函数。然而,试图直接调用构造函数通常会导致意外的行为。许多开发人员只需在初始化函数中从构造函数中复制代码,这将起作用,但会导致重复的代码。在这种情况下,最好的解决办法是将代码从构造函数来你的新功能,并有构造函数调用你的函数来初始化数据工作:
class Foo
{
public:
Foo()
{
Init();
}
Foo(int value)
{
Init();
// do something with value
}
void Init()
{
// code to init Foo
}
};
T是相当常见的包括()函数,初始化成员变量的默认值,然后让每个构造函数调用()函数之前做它的参数的具体任务。这最大限度地减少重复代码,允许您显式调用()从你喜欢的地方。
一个小警告:当使用()函数和动态分配的内存要小心。因为()函数可以被任何人在任何时间,动态分配的内存可能已被分配时,称为()。要妥善处理这种情况,它可以稍微混乱,因为一个非空指针可以是动态分配的内存或一个未初始化的指针!
委托构造函数在C++ 11
从C++ 11,构造函数可以调用其他构造函数。这个过程被称为委托构造函数(或构造函数链)。
有一个构造函数调用另一个,在成员初始化列表只需调用构造函数。这是一个直接调用另一个构造函数的情况下是可以接受的。适用于我们上面的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Foo
{
private:
public:
Foo()
{
// code to do A
}
Foo(int value): Foo() // use Foo() default constructor to do A
{
// code to do B
}
};