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

Конструкторы и деструкторы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция round(), округление числа до 4-х знаков после запятой http://www.cyberforum.ru/cpp-beginners/thread542466.html
Вот наткнулся на проблемку как округлить число до 4 знаков после запятой? Подскажите что делать?
C++ Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное число и записать его в переменную a, выполнить требуемую проверку. Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное число и записать его в переменную a типа unsigned. Выполнить необходимые проверки для данного числа: Проверить,... http://www.cyberforum.ru/cpp-beginners/thread542462.html
C++ Очень стремная задача
На плоскости задано N точек, которые пронумерованы слева на право (а при равных абсциссах снизу вверх). Нужно создать программу, которая строит многоугольник, который является выпуклой их оболочкой,...
Прибавить к элементам каждого столбца первой матрицы произведения элементов соответствующих строк второй C++
Привет ВСЕМ!!! Помогите пожалуйста с одной задачкой!!!) Пусть даны две вещественные матрицы порядка N. Получить новую матрицу следующим способом: прибавлением к элементам каждого столбца первой...
C++ Не передается массив в функцию http://www.cyberforum.ru/cpp-beginners/thread542422.html
Всем привет,не могу передать массив в функцию,после передачи массив получается пустой ILuaObject *args; args =(ILuaObject *)g_Lua->GetReference(1); args =(ILuaObject...
C++ Ошибка при вызове деструктора Программа компилиться нормально,но после выполнения system("pause"); выползает непонятное окно,и указывает на ошибку в деструкторе.В чем может быть проблема? Заранее спасибо. #include... подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
08.04.2012, 17:07
glukobug, ошибка есть в любом случае. Если класс реализует захват ресурсов, он должен предоставлять самописный оператор присваивания и конструктор копии. У вас деструктор вызывается три раза (а дебагу как раз и надо верить, там не производятся такие жёсткие оптимизации, как в релизе), потому что при возврате по значению из оператора + происходит копирование, а поскольку у вас нет конструктора копии (который реализовывал бы верное копирование захваченных ресурсов), то при копировании копируется указатель. При удалении копии выделенная память удаляется, а при удалении оригинала происходит попытка удалить уже удалённую память. По ссылке выше код не падает, потому что компилятор там реализует стандарт C++0x, который разрешает при возврате по значению вызывать не конструктор копии, а перемещающий конструктор (который предоставляется по умолчанию), а ему как раз и требуется перемещать ресурсы из удаляемого объекта в создаваемый (что в вашем случае совпадает с копированием указателя), отсюда программа и не падает.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru