gpt4 book ai didi

C++ 构造函数和静态成员

转载 作者:太空狗 更新时间:2023-10-29 20:20:13 26 4
gpt4 key购买 nike

我正在尝试一些东西,但我不知道代码是怎么回事。我有一个类,它有一个静态成员和默认构造函数以及一个重载的构造函数。

class Remote
{
public:
static std::vector<Remote*> channels;

static void interrupt() {
for (Remote* r : channels) {
r->ProcessInterrupt();
};
}

void ProcessInterrupt() {
std::cout << "ProcessInterrupt called.";
};

Remote(const int a) {
std::cout << "Remote(const int a) called.\n";
channels.push_back(this);
}
Remote() {
Remote(1);
std::cout << "Remote() called.\n";
}
~Remote() {
std::vector<Remote *>::iterator ch = std::find(channels.begin(), channels.end(), this);
if (ch != channels.end()) {
channels.erase(ch);
};
}
};

在 main.cpp 中,我声明了 Remote 类的两个实例。我现在注意到的是,如果我用默认构造函数实例化它们,则指针不会添加到 vector 中。然后我尝试使用重载构造函数并将它添加到 vector 中。

Remote r1 = Remote();
Remote r2 = Remote(1);
std::cout << Remote::channels.size() << "\n";
Remote::interrupt();

我希望,因为我正在调用重载的构造函数,所以它仍会添加指向 vector 的指针。然而,这显然没有发生。

谁能解释一下发生了什么?

亲切的问候,

鲍勃

最佳答案

构造函数

Remote() {
Remote(1);
std::cout << "Remote() called.\n";
}

不向 channels vector 添加任何内容。 此上下文 中的 Remote(1) 不是委托(delegate)构造函数。

试试这个:

Remote() : Remote(1) {
std::cout << "Remote() called.\n";
}

请在此处查看示例:https://ideone.com/ahauPV

关于C++ 构造函数和静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52727058/

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