初始化类的私有成员变量

Mae*_*edy 6 c++ initialization class

我提前道歉,因为我的一些措辞可能不是100%正确.

我会有一个这样的课:

class ClassName {
private:
    AnotherClass class2;
public:
  ClassName();
  ~ClassName();
...
Run Code Online (Sandbox Code Playgroud)

在这个类的构造函数中,除其他外,我把这行

ClassName::ClassName() {
    AnotherClass class2; 
}
Run Code Online (Sandbox Code Playgroud)

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

eml*_*lai 5

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

类成员中的构造体之前被初始化构件初始化列表构造器签名和主体之间,从一个:,如下所示:

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

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

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