对象成员初始化顺序

时间:2019-05-13 09:07:15

标签: c++ embedded watchdog

我正在将许多C驱动程序集成到C ++集成的嵌入式项目中。 转向OOP方法后,我将函数和变量组织为类,每个类都代表一个系统模块。

声明全局对象,包括编译器RTS库启动代码,以在程序执行到达main()之前使用其构造函数来构建它们。 这会延迟watchdog_timer的禁用功能,该功能是从main()调用的,因此系统无法启动。

我有一个全局对象,其中包含其他对象作为成员,每个对象都有其非平凡的构造函数;从全局对象构造函数中停止看门狗计时器不起作用,但是,如果在第一个成员对象构造函数的开头执行相同的指令,这似乎可以。

让我们上一堂课:

class A
{
    object B;
    object C;
    object D;
    // ...

public:
    A(void);
    // ...
};

A::A()
{
    Stop_WatchDog();
    // ...
}

类似下面的代码将重现该问题:

A myContainerObject;

int main()
{
   Stop_WatchDog();
}

除非我将B更改为:

class B
{
    // ...
public:
    B(void);
    // ...
}

B::B()
{
    Stop_WatchDog();
    // ...
}

这是可重现的行为,因此在这种情况下,我总是可以假设B构造函数中的第一条指令是在程序的开始执行的?

0 个答案:

没有答案
相关问题