如何在C ++中实现这种模式?

时间:2016-12-07 12:00:13

标签: c++ design-patterns

我有一个班级UDPSocketTest,它来自SocketTestSocketTest需要在其构造函数中使用参数。

由于使用gtest框架,UDPSocketTest需要一个没有参数的构造函数,所以我想在UDPSocketTest的构造函数中创建它,并将其传递给SocketTest

问题是基类是在C ++标准成员之前初始化的。

class UDPSocketTest : public SocketTest
{               
public:         
   UDPSocketTest()
      socketPool_(new SocketPool()),  <<---- Line 1
      SocketTest(socketPool_) {       <<---- Line 2
   }                         

   ~UDPSocketTest() {
   }           

private:
   SocketPool* socketPool_;
};

但是第2行应该在第1行之前调用。那么有什么方法可以实现它吗?

1 个答案:

答案 0 :(得分:3)

使用委托构造函数(C ++ 11):

class UDPSocketTest : public SocketTest
{               
public:         
   UDPSocketTest() : UDPSocketTest(new SocketPool()) {}

   // You should already have this constructor written:
   UDPSocketTest(SockerPool *p)
      SocketTest(p),
      socketPool_(p)
   {
   }                         

   ~UDPSocketTest() {
   }           

private:
   SocketPool* socketPool_;
};

这是阻力最小的道路。在C ++ 11之前,您必须将socketPool_移动到从第一个继承的基类中,因此它将是初始化顺序中的第一个。