C++构造函数和静态成员
C++ Constructors and static members
我正在尝试一些东西,我不知道代码是怎么回事。我有一个类,它有一个静态成员和一个默认构造函数和一个重载的构造函数。
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 类的两个实例。我现在注意到的是,如果我使用默认构造函数实例化它们,指针不会添加到向量中。然后我尝试使用重载的构造函数,它确实将其添加到向量中。
Remote r1 = Remote();
Remote r2 = Remote(1);
std::cout << Remote::channels.size() << "n";
Remote::interrupt();
我希望由于我调用重载的构造函数,它仍然会添加指向向量的指针。然而,这显然没有发生。
谁能解释一下发生了什么?
亲切问候
鲍勃
构造函数
Remote() {
Remote(1);
std::cout << "Remote() called.n";
}
不会向channels
向量添加任何内容。在此上下文中,Remote(1)
不是委托构造函数。
试试这个:
Remote() : Remote(1) {
std::cout << "Remote() called.n";
}
请参阅此处的示例:https://ideone.com/ahauPV
相关文章:
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 指向重载静态成员的函数指针 - 在unique_ptr中用作自定义删除器
- 在成员构造函数之后调用基类构造函数
- 函数指针静态,构造函数
- C++:如何在对象构造过程中调用初始值设定项列表之外的成员构造函数
- 用作成员构造函数参数的函数的求值顺序
- 从成员构造函数(Brace Initializer vs Initializer列表)抛出异常
- 不正确的成员构造函数定义
- 返回本地静态的函数和返回静态成员的函数之间有什么区别(对象大小、性能等)?
- 指向结构中作为静态成员的函数的指针
- 我可以基于模板参数将某个值传递给成员构造函数吗
- boost::p ython 纯虚拟基类,具有静态工厂构造函数和 std::unique_ptr
- cpp-静态成员和函数
- 在最终类中调用静态方法的静态基构造函数的设计模式
- 控制静态对象构造函数的顺序
- 在类定义中调用成员构造函数
- 使用已删除的副本构造函数和初始值设定项列表重载调用类定义中的成员构造函数
- 正在从成员构造函数调用虚拟函数
- 来自静态变量构造函数/析构函数的异常
- 需要从静态成员调用函数(由静态指针引用)