在构造函数中将全局类成员指针添加到 std::list,导致下一个类添加时出现问题

Adding global classes member pointers to std::list in constructor, causes trouble on next class add

提问人:great_Suvorov 提问时间:1/4/2020 更新时间:1/4/2020 访问量:34

问:

我正在使用 C++ Arduino API 为 NodeMCU 控制器开发相当大的项目。 (使用 VS Code Platformio 进行编译和运行)

我的项目包含一些作为类完成的模块,其中只有一个成员使用extern

//LedModule.h
extern _LedModule LedModule;

//LedModule.cpp
_LedModule LedModule;

我创建了抽象基类,从中扩展了其他类

class IParameter {
public:
    virtual void initParameter();
};

所以。。。在 LedModule.h 中

class _LedModule : public IParameter {
  //...
  void initParameter();
  //...
};

我曾经保存所有使用接口的模块 所以在 LedModule 中.cppstd::list<IParameter *> registredParameters;

_LedModule::_LedModule(){
  //..
  registredParameter.push_back(this);
  //..
};

在此之后,我通过调用接口函数在运行时使用此列表

一切正常,但在添加下一个模块时,控制器在负载时复位。

通过(我无法实时调试控制器)注释块

//registredParameter.push_back(this);

我意识到控制器在向列表添加新指针时失败,因为当我的模块构造函数调用时,没有调用列表构造函数

由于全局构造函数的调用顺序

在 C++ 中,如果使用多个事务单元,则无法知道构造函数的调用顺序

如何安全地将全局类成员指针添加到列表?

我实际上并不想创建大型函数并手动收集类以添加到此列表中;

C++ 列表 std

评论

0赞 parktomatomi 1/4/2020
这有帮助吗?cs.technion.ac.il/users/yechiel/c++-faq/......
0赞 great_Suvorov 1/5/2020
@parktomatomi谢谢,这帮了大忙,你能添加一个答案吗,我会把它标记为正确

答: 暂无答案