我有一个班级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行之前调用。那么有什么方法可以实现它吗?
答案 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_移动到从第一个继承的基类中,因此它将是初始化顺序中的第一个。