Re[3]: Разрушение статических объектов
От: KPavel Россия  
Дата: 26.07.03 13:50
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

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? Должна ли
реализация фиксировать очередность по моментам окончания инициализации объектов? В принципе, мне
такое поведение как раз и нужно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.