我提前致歉,因为我的某些字眼可能不是100%正确。

我将有一个像这样的类(class):

class ClassName {
private:
    AnotherClass class2;
public:
  ClassName();
  ~ClassName();
...

在该类的构造函数中,除其他外,我将
ClassName::ClassName() {
    AnotherClass class2;
}

这就是我以为您应该使用C++初始化对象的方式,但是我注意到(通过GDB)正在创建两个AnotherClass对象。一次在构造函数定义中,然后再次在我的初始化行中。这背后的原因是什么?如果我想使用更复杂的构造函数(如AnotherClass(int a, int b)),该方法将创建一个临时对象,然后在不久后创建正确的对象吗?

最佳答案

AnotherClass class2;在构造函数主体内创建另一个本地对象,该对象在主体末尾被销毁。这不是初始化类成员的方式。

类成员在构造函数签名和主体之间的成员初始化程序列表中的构造函数主体之前进行初始化,从:开始,如下所示:

ClassName::ClassName() :
    class2(argumentsToPassToClass2Constructor),
    anotherMember(42) // just for example
{
    /* constructor body, usually empty */
}

如果您不想将任何参数传递给class2构造函数,则不必将其放在初始化程序列表中。然后将调用其默认构造函数。

如果只想在所有类成员上调用默认构造函数,则可以(并且应该)完全省略该构造函数。隐式生成的默认构造函数将执行您想要的操作。

10-08 05:21
查看更多