Здравствуйте, Павел Кузнецов, Вы писали:
K>> Определяется ли порядок разрушения статических и глобальных объектов
K>> порядком инициализации? Если да, то как — LIFO?
ПК>Именно так. При этом, гарантируется, что разрушение будет происходить именно в таком порядке,
ПК>независимо от того, в каких единицах трансляции определены объекты.
Это относится и к статическим объектам, определенным в функциях? Я попробовал сделать следующее:
class c_resource
{
public:
c_resource(void)
{
}
~c_resource(void)
{
}
};
class c_some
{
public:
c_some(void);
~c_some(void);
private:
static c_resource& get_resource(void)
{
static c_resource resource;
return resource;
}
};
c_some::c_some(void)
{
c_resource& resource = get_resource();
}
c_some::~c_some(void)
{
c_resource& resource = get_resource();
}
c_some some;
+ пустой main(). Компилятор — VC6.
Расставил breakpoints. Конструкторы вызываются в таком порядке: c_some, c_resource.
Деструкторы — точно так же: ~c_some, ~c_resource.
Почему так, ведь resource инициализировался после начала инициализации some?
Должна ли
реализация фиксировать очередность по моментам
окончания инициализации объектов? В принципе, мне
такое поведение как раз и нужно.