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

delete void* - C++

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

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,257
Записей в блоге: 28
04.02.2010, 16:46
> Ну у списка есть дестуктор, он освободит ресурсы там

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

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

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