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

Повторный вызов деструктора - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ gets() проверка ввода http://www.cyberforum.ru/cpp-beginners/thread750892.html
возникло слабое звено в программке ... max_length = 100; line = new char; ... gets(line); ... вопрос такой: как защитить программу от ввода строки больше 100 символов или как с генерировать исключение
C++ Найти скалярное произведение векторов Помогите пожалуйста, у самой никак не получается, надо написать программу на С++. Даны координаты двух n-мерных векторов A(a1; a2;..; an) B(b1; b2;..; bn). Найти скалярное произведение векторов: A * B = \sum_{i=1}^{n} {a}_{i} * {b}_{i} http://www.cyberforum.ru/cpp-beginners/thread750856.html
Если количество строк в матрице четное, то поменять строки местами по правилу C++
Помогите с задачей !!!!!! Создать квадратную матрицу целых чисел: - массив заполнить случайными значениями с помощью генератора случайных чисел. Если количество строк в массиве четное, то поменять строки местами по правилу: первую строку со второй, третью - с четвертой и т.д. Если количество строк в массиве нечетное, то оставить массив без изменений.
C++ 3D программирования для начинающих
Добрый вечер всем!Я хочу начать учить 3D программирования, но не знаю с чего начать. Возможно кто-то бы посоветовал с чего начать, какую литературу читать, возможно какую-то статью хорошую посоветовал!
C++ Как написать защиту от некорректного ввода для моей проги? http://www.cyberforum.ru/cpp-beginners/thread750813.html
void task_1(int **A, int M, int N) { int i=0, sum=0; //1.) сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент; bool bFlag; for (int i=0; i < M; i++){ bFlag=false; for (int j=0; j < N; j++){ if(A<0){
C++ Определить самую большую отрицательную и самую маленькую положительную температуры Помогите новичку,первая контрольная по программированию в с++ В массиве T(12) хранится среднемесячная температура для каждого из 12 месяцев в г. Могилеве. Определить самую большую отрицательную и самую маленькую положительную температуры. Исходные массивы заполнить случайными числами. подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1237 / 986 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.01.2013, 00:08     Повторный вызов деструктора
Ничего. Возврат памяти системе — головная боль реализации. Её выделение неявное: это проблемы new и delete, где её взять и как вернуть. auto-объектов, которые (обычно) создаются на стеке, это тоже касается — это проблемы рантайма, как он там шаманит со стеком и кто и когда будет дёргать указатель на верхушку стека.

Поэтому деструктор не возвращает память, выделенную new. Это делает delete (заодно вызывая деструктор). Или это происходит автомагически, если объект создавался на стеке.

Но с точки зрения спецификации объекта уже нет, когда начался вызов деструктора. Его работа — это действительно деинициализация объекта. И как только он начал это делать, объект уже нельзя использовать, потому что он "в процессе разбора/разобран". Нельзя вызвать деструктор повторно. Нельзя даже вызывать методы этого объекта (даже в деструкторе). Это как с выделением памяти — то, что объект ещё остался в памяти сразу после вызова delete, не гарантирует, что его можно спокойно продолжать использовать.

Добавлено через 8 минут
Тут я погорячился, во время деструктора ещё можно дёргать объект. Но только внутри самого деструктора, а не из параллельного потока, например. И если это виртуальная функция, то под честное слово, что она не будет лезть в ту часть, которая уже убита предыдущими деструкторами классов-родителей.
 
Текущее время: 14:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru