提问人:great_Suvorov 提问时间:1/4/2020 更新时间:1/4/2020 访问量:34
在构造函数中将全局类成员指针添加到 std::list,导致下一个类添加时出现问题
Adding global classes member pointers to std::list in constructor, causes trouble on next class add
问:
我正在使用 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++ 中,如果使用多个事务单元,则无法知道构造函数的调用顺序
如何安全地将全局类成员指针添加到列表?
我实际上并不想创建大型函数并手动收集类以添加到此列表中;
答: 暂无答案
评论