延迟构造函数调用

Buf*_*low 5 c++ constructor

我需要延迟构造函数调用,因此我可以初始化应传递给构造函数的值.我写了一个简短而简单的例子.

class A
{
private: 
   ObjectA* _ptr;

public: 
   A(ObjectA*);
};

class B
{
private:
   A object;     // The constructor seems to be called here?
   ObjectA* obj;

public: 
   B();
};

A::A(ObjectA* ptr) 
{
   this->_ptr = ptr;
}

B::B()
{
   obj = new ObjectA();
   object(obj); // I want to call the 'A' constructor here, after initializing of 'obj'.
}
Run Code Online (Sandbox Code Playgroud)

可能吗?

Fat*_*KIR 15

不,您不能推迟构建值成员.您可以使用指针而不是直接值,但这不是您的问题的解决方案.

您的问题的正确解决方案是使用初始化列表:

B::B ( ) : obj(new ObjectA), object(obj) {}
Run Code Online (Sandbox Code Playgroud)

此外,你必须把obj之前objectclass B:

class B
{
        private:
                ObjectA *obj;
                A       object;

        public: 
                B ( );
}
Run Code Online (Sandbox Code Playgroud)

这样做的原因是,当调用构造函数时,必须正确构造和初始化所有对象成员.这是使用他们的默认构造函数完成的.

重新排序类成员的原因是成员的初始化程序按它们在类中声明的顺序调用,而不是按照它们在初始化列表中的外观顺序.