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

delete void* - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу численного дифференцирования функции http://www.cyberforum.ru/cpp/thread92406.html
Составить программу численного дифференцирования функции, заданной табличными значениями, с применением классов: конструктора, деструктора, конструктора по умолчанию, конструктора для копирования, функции инициализации (переустановке значений) set(), функции вычисления значения производной в заданной точке run(), вывода результатов print() и перегрузки оператора =. Для вычисления производной...
C++ Конструктор ссылки? StateManager.h class StateManager{ public: typedef long state_type; typedef void (*executor)(int); StateManager::StateManager(state_type mainState, executor newExec); private: executor exec; struct state_unit{ http://www.cyberforum.ru/cpp/thread92331.html
C++ zlib Двойное архивирование\разархивирование
Использую библиотеку zlib 1.2.3 Нужно сохранять массив объектов в файл и потом загружать её. Вес - 10 мегабайт. Решил сжать перед записью. Сделал... обнаружил что уже сжатый файл тоже бы мог сжаться хорошенько (60кб). Сжал кое как... получил 6кб. Отлично... Пытаюсь разжать дважды. Что то выходит, однако тест загруженого массива объектов в реальной программе показывает баги (этот массив...
C++ ОШИБКА
Что за ошибка: Must use c++ for the type iostream??
C++ пропадающее окно http://www.cyberforum.ru/cpp/thread91622.html
ещё раз здраствуйте. в предыдущий теме вы мне помогли http://www.cyberforum.ru/cpp/thread91603.html спасибо большое. но теперь у меня новая проблема. я использовал несколько програм втом числе и эту http://www.cyberforum.ru/cpp/thread89930.html в языке си. ошибок нет, но окно на секундо появляется и исчезает как-бутто эта программа ничего не делает. помогите пожалуйста.
C++ Внешние объекты в классе Если класс исплользует какую то внешнюю переменную (например hWnd), то как будет более корректно его создать: class MyClass { private: HWND* _myWnd; public: MyClass(HWND* extWnd, ...) :_myWnd(extWnd); } Или нормально создать hWnd глобальным и в классе прописать extern? подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17618 / 5842 / 375
Регистрация: 30.03.2009
Сообщений: 16,117
Записей в блоге: 26
04.02.2010, 16:46
> Ну у списка есть дестуктор, он освободит ресурсы там

Ответ неверный. Собственно одно из стандартных заблуждений. Когда ты пишешь

C++
1
MyClass* MyObj = new MyClass;
то реально в этом месте делаются сразу два дейстия: выделение памяти и вызов конструктора. Конструктор память НЕ выделает, он только инициализирует поля. Т.е. этот код эквивалентен (по своей сути):

C++
1
2
MyClass* MyObj = (MyClass*) malloc (sizeof (MyClass));
MyObj->MyClass(); // условно обозначил вызов конструктора, как будто бы он есть процедура
Аналогично работает delete: сначала вызывается деструктор, а потом делается освобождение памяти. Чтобы вызвать деструктор, нужно знать тип, куда ссылается указатель (чтобы вызвать деструктор того класса, которым является объект). Чтобы освободить память, ничего кроме адреса знать не нужно, поскольку информация о размере выделенной памяти была записана в скрытых местах в момент вызова malloc'а
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru