Форум программистов, компьютерный форум CyberForum.ru

Два раза вызывается деструктор - C++

Восстановить пароль Регистрация
 
Lordif
 Аватар для Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
31.05.2012, 21:18     Два раза вызывается деструктор #1
Создал класс, в процессе выполнения программы вызвал деструктор, но когда программа завершается, деструктор вызывается повторно и вылетает ошибка, так как внутри есть указатели, которые уже удалены или обнулены.
C++
1
2
3
4
int main(){
Class<int> A;
A.~Class(); //Вызывается деструктор
} //Повторно вызывается деструктор
Объясните почему такое может происходить?

Добавлено через 4 минуты
Только что заметил, тоже самое и с std::list
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1561 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,896
Завершенные тесты: 1
31.05.2012, 21:28     Два раза вызывается деструктор #2
Деструкторы не надо вызывать явно. Их вызов генерируется автоматически при уничтожении объекта.
Lordif
 Аватар для Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
31.05.2012, 21:31  [ТС]     Два раза вызывается деструктор #3
А если мне необходимо уничтожить объект в каком то месте программы?
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
31.05.2012, 21:34     Два раза вызывается деструктор #4
Цитата Сообщение от Lordif Посмотреть сообщение
А если мне необходимо уничтожить объект в каком то месте программы?
тогда выделяй под него динамическую память.
Nick Alte
Эксперт С++
1561 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,896
Завершенные тесты: 1
31.05.2012, 21:36     Два раза вызывается деструктор #5
Тогда логично устроить так, чтобы в этом месте заканчивался его цикл жизни. Например, вложенным блоком:
C++
1
2
3
4
5
6
7
8
9
10
void foo()
{
    {
        std::vector<int> a;
        a.reserve(100);
        // ...
    }  // Здесь a уничтожается
    std::list<std::string> l;
    // ...
}  // Здесь уничтожается l
Если даже блоками удобно не получается - к нашим услугам всегда "сладкая парочка" new-delete, а лучше new и unique_ptr
Lordif
 Аватар для Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
31.05.2012, 21:38  [ТС]     Два раза вызывается деструктор #6
Спасибо, что помогли разобраться
Yandex
Объявления
31.05.2012, 21:38     Два раза вызывается деструктор
Ответ Создать тему
Опции темы

Текущее время: 02:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru