Re[5]: Не печатается из деструктора глобального объекта
От: Анатолий Широков СССР  
Дата: 28.11.03 14:54
Оценка:
Здравствуйте, achp, Вы писали:

A>Здравствуйте, Анатолий Широков, Вы писали:


АШ>>Совершенно верно, здесь как раз нет двух единиц трансляции. О том как инициализировать глобальный объект перед первым его использованием писал Страуструп:


A>Это уже подробности реализации. Главное, что стандарт такое требование предусматривает.


Скорее мой пост относился Bell-у, чем Вам
Re[4]: Не печатается из деструктора глобального объекта
От: Павел Кузнецов  
Дата: 28.11.03 14:55
Оценка:
Здравствуйте, artelk, Вы писали:

ПК>> 27.3/2

ПК>>

The objects are not destroyed during program execution. 265)

ПК>> 265) Constructors and destructors for static objects can access these objects
ПК>> to read input from stdin or write output to stdout or stderr.


ПК>> Скорее всего, у Amon-RA старый компилятор (например, VC++6).


a> Конструкторы и деструкторы имеют возможность непосредственно писать в потоки stdin и stdout

a> (через системные вызовы). В классе CCC идет косвенный вывод в stdout через интерфейс std::cout,
a> представляющего из себя обычный объект, не имеющий никаких преимуществ перед другими
a> статическими объектами (вероятно).

Сноска 265 служит пояснением к пункту 27.3/2, в котором под the objects подразумеваются как
раз std::cout, std::cin, std::cerr, std::clog, std::wcout, std::wcin, std::wcerr, std::wclog.
Это прямая гарантия со стороны стандарта относительно времени жизни этих объектов. Так что
в этом отношении std::cout имеет некоторые "преимущества" перед другими объектами со статическим
классом памяти (static storage duration). Кроме того, как уже указывалось, std::cout не должен
разрушаться до деструктора CCC, т.к. деструкторы должны вызываться в порядке, обратном по
отношению к очередности вызова конструкторов, а во время вызова CCC() std::cout уже существовал.

Это известная ошибка VC++6.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: Не печатается из деструктора глобального объекта
От: addword Украина  
Дата: 28.11.03 15:07
Оценка:
Здравствуйте, Amon-RA, Вы писали:

AR>
AR>CCC::~CCC()
AR>{
AR>    std::cout<<"O-o-o-op-s-s\n";
AR>};

AR>CCC Glob_VAR;

AR>int main(int argc, char* argv[])
AR>{
AR>    return 0;
AR>}
AR>


Боюсь что когда вызывается деструктор, никой вывод уже не будет работать. То есть ошибок не будет, но Вы его не увидите.

Удалено избыточное цитирование. -- ПК.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.