簡體   English   中英

如何在C ++中實現這種模式?

[英]How to implement this pattern in C++?

我有一個UDPSocketTest類,它是從SocketTest派生的。 SocketTest在其構造函數中需要一個參數。

因為使用了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行之前調用。那么有什么方法可以實現呢?

使用委托的構造函數(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_移入從第一個繼承的基類,因此它將是初始化順序中的第一個基類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM