我有一个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行之前调用。那么有什么方法可以实现呢?
最佳答案
使用委托(delegate)的构造函数(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_移入从第一个继承的基类,因此它将是初始化顺序中的第一个基类。