C++ 使用来宾对象更改类中调用构造函数的顺序

C++ 使用来宾对象更改类中调用构造函数的顺序,c++,class,constructor,C++,Class,Constructor,问题是我需要在创建类“a object”后调用来宾的构造函数。有什么办法吗?如果您想将来宾作为一个对象,请不要 如果您可以随意将其设置为指针,则可以对其使用延迟初始化。真正的问题是,为什么需要在一个的构造函数之后调用来宾的构造函数 guest是a的一部分,因此在a的构造函数之后调用其构造函数在术语上是一个矛盾:一个对象只有在其所有子对象都被完全构造时才被完全构造,因此,完成a构造函数的执行意味着完成guest构造函数的执行 当然,这并不意味着您不能在a的构造过程中默认构造guest,并在a的构造

问题是我需要在创建类“a object”后调用来宾的构造函数。有什么办法吗?

如果您想将
来宾
作为一个对象,请不要

如果您可以随意将其设置为指针,则可以对其使用延迟初始化。

真正的问题是,为什么需要在
一个
的构造函数之后调用
来宾
的构造函数

guest
a
的一部分,因此在
a
的构造函数之后调用其构造函数在术语上是一个矛盾:一个对象只有在其所有子对象都被完全构造时才被完全构造,因此,完成
a
构造函数的执行意味着完成
guest
构造函数的执行


当然,这并不意味着您不能在
a
的构造过程中默认构造
guest
,并在
a
的构造过程中为其分配一个不同的值,或者,如果您根本不希望在
a
的构造过程中构造
guest
对象,则可以使用指针(如果使用智能指针更好)为了对
a
对象之间的关联进行建模,我假设
guest
host
之后构建
guest
的原因是在构建
guest
时需要
host
的一些功能。在这种情况下,您可以将该功能导出到一个单独的类中,该类在
guest
之前构建。因此

class a
{
   object guest;
}

a::a() : guest(required_argument)
{
}
请注意,以下简单实现将失败

class some_interface { /* some abstract functionality needed by guest::guest() */ };

class guest
{
public:
  guest(some_interface const&); // calls pure virtual functions of some_interface
  /* more stuff */
};

class host_interface : public some_interface 
{
  /* implements pure virtual methods of its base */
};

class host
{
  host_interface _interface;
  guest _guest;
public:
  host(...)
  : _interface(...)
  , _guest(_interface)
  {}
  /* more stuff */  
};

因为当传递给
guest::guest()
时,这个
还没有被构造,纯虚拟函数将被调用(我真的有一次遇到了这个错误,并且得到了运行时错误“pure virtual function called”,即使编译器应该能够检测到它)。

这很遗憾,这是不可能的,但肯定有原因。无论如何,谢谢您的回答。@user1873947原因是如果
对象
有一个构造函数,那么它不是一个POD,所以标准要求它被初始化。a类是主gui类,来宾对象是一个使用主gui资源的小部件。我将guest声明为std::shared_ptr,并在a的构造函数中调用make_shared,这就完成了工作。
class host : some_interface
{
  /* some_data */
  guest _guest;
public:
  host(...)
  : some_data(...)
  , _guest(*this)
  {}
  /* more stuff */
};