Почему деструктор глобального объекта вызывается дважды после инициализации ссылки на него?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему деструктор глобального объекта вызывается дважды после инициализации ссылки на него?

Сообщение Anonymous »

Если я условно инициализирую константную ссылку для ссылки либо на глобальный объект, либо на временный объект, возвращаемый функцией, в обоих случаях компилятор вызывает деструктор, когда он выходит за пределы области видимости, поэтому глобальный объект уничтожается дважды. р>

Код: Выделить всё

#include 
#include 

using namespace std;

struct S {
string name;
S(const string & n) : name(n) {
printf("%s(%s)\n", __func__, name.c_str());
}
~S() {
printf("%s(%s)\n", __func__, name.c_str());
}
void g() const {
printf("%s(%s)\n", __func__, name.c_str());
}
};

S f() {
return S("f");
}

S s("global");

int main(int argc, char ** argv) {
(void)argc, (void)argv;
printf("%s: begin\n", __func__);
for (int i=0; i

Подробнее здесь: [url]https://stackoverflow.com/questions/79311767/why-is-a-global-object-destructor-called-twice-after-initializing-a-reference-to[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»