class a
{
   object guest;
}

a::a() : guest(required_argument)
{
}

问题是我需要在创建类之后将 guest 的构造函数称为“对象”。有办法吗?

最佳答案

我想在guest之后构造host的原因是在host的构造中需要guest的某些功能。在这种情况下,您可以将该功能外包到guest之前构造的单独的类中。从而

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 */
};

请注意,以下朴素的实现将失败
class host : some_interface
{
  /* some_data */
  guest _guest;
public:
  host(...)
  : some_data(...)
  , _guest(*this)
  {}
  /* more stuff */
};

因为传递给this时尚未构建guest::guest(),并且纯虚拟函数将被调用(我确实曾经有此错误,并且得到了运行时错误“纯虚拟函数已调用”,即使编译器本来可以检测到此)。

关于c++ - 使用 guest 对象更改类中调用构造函数的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14185038/

10-13 08:24