ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
986692 Топик полностью
fk0, легенда (17.03.2020 10:02, просмотров: 233) ответил AlexG на C++. Допустим, у меня есть объект некоторого класса. У этого класса есть поле, являющееся объектом какого-то другого класса. Могу ли я в конструкторе первого класса работать с этим полем или потом вызовется уже его конструктор и затрет все что было сделано?
Его конструкторы вызовется до твоего конструктора. Язык гарантирует, что конструкторы внутренних объектов вызовутся раньше (из конструктора содержащего их класса).  Порядок вызова конструкторов статических экземпляров классов в общем случае не определён. Они вызываются, условно, в каком попало порядке до вызова main(). Если нужен конкретный порядок, то следует такие объекты превратить синглтон Мейерса: 

struct C
{
    C& instance()
    {
        static C val;
        return val;
    }|
    ...
private:
    C()
    {
     ...
     }
     ...
};


Синглтоны конструируются при первом обращении, уничтожаются в порядке обратном конструированию. И начиная с C++11 заодно являются thread safe.

[ZX]