Предположим, у меня есть:статический деструктор
void foo() {
static Bar bar;
}
ли C++ гарантирует мне, что Бар :: Bar() вызывается бар и бар :: ~ Bar() никогда не вызывается в строке? (До тех пор, пока основные выходы).
Спасибо!
Предположим, у меня есть:статический деструктор
void foo() {
static Bar bar;
}
ли C++ гарантирует мне, что Бар :: Bar() вызывается бар и бар :: ~ Bar() никогда не вызывается в строке? (До тех пор, пока основные выходы).
Спасибо!
Да. В первый раз выйдет foo()
, будет построено Bar bar
. Он будет доступен до тех пор, пока main()
не закончится, после чего он будет разрушен.
Это по существу:
static Bar *bar = 0;
if (!bar)
{
bar = new Bar;
// not "real", of course
void delete_bar(void) { delete bar; }
atexit(delete_bar);
}
Примечание Я сказал "по существу"; это, вероятно, не то, что на самом деле происходит (хотя я не думаю, что это слишком далеко).
3.7.1 Статический срок хранения
1 Все объекты, которые не имеют ни динамический срок хранения и не являющиеся локальными имеют статическую продолжительность хранения. Хранение данных объектов должно продолжаться на протяжении всей программы (3.6.2, 3.6.3).