我有一个类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行之前调用,那么有什么方法可以实现这一点呢?
发布于 2016-12-07 12:05:18
使用委托构造函数(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_移到从第一个继承的基类中,这样它将是第一个按初始化顺序排列的基类。
https://stackoverflow.com/questions/41016893
复制相似问题