gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:39 25 4
gpt4 key购买 nike

我有一个类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_ 移动到从 first 继承的基类中,因此它将是初始化顺序中的第一个。

关于c++ - 如何在 C++ 中实现这种模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com