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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BeginerMan
 Аватар для BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 423
#1

Удаление динамической памяти - C++

12.01.2014, 00:12. Просмотров 410. Ответов 4
Метки нет (Все метки)

Всем здрасьте.
Имеется вот такая структура.
C++
1
2
3
4
5
6
7
8
9
10
11
struct ModelType
{
    DWORD FVF;
    IDirect3DVertexBuffer9* vertexBuffer;
    IDirect3DIndexBuffer9* indexBuffer;
    IDirect3DTexture9* texture;
    int vertexCount;
    int indexCount;
    LPCWSTR namemodel;
};
ModelType* m_model;
Здесь IDirect3DVertexBuffer9 и IDirect3DIndexBuffer9 и IDirect3DTexture9 это интерфейсы directx9.
Я выделяю память под структуру вот так:
C++
1
2
m_model = new ModelType[5];
if(!m_model) return false;
Дальше в эту структуру я записываю данные.
И вот вопрос.
Перед тем как прописать :
C++
1
delete m_model;
Нужно ли мне делать релиз интерфейсов ?
C++
1
m_model[0].vertexBuffer->Release();
Или можно сразу не задумываясь просто удалять память ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2014, 00:12     Удаление динамической памяти
Посмотрите здесь:

C++ Матрица в динамической памяти
Удаление динамической памяти C++
Выделение и удаление памяти, выделенной для динамической строки C++
Вопросы по динамической памяти. C++
C++ Удаление структуры из динамической памяти
перераспределение динамической памяти C++
C++ Удаление вектора из области динамической памяти.
C++ Массив в динамической памяти
C++ Выделение динамической памяти
C++ Выделение динамической памяти
Удаление new из динамической памяти C++
C++ Освобождение динамической памяти в vs

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12498 / 7060 / 792
Регистрация: 27.09.2012
Сообщений: 17,443
Записей в блоге: 2
Завершенные тесты: 1
12.01.2014, 00:15     Удаление динамической памяти #2
Цитата Сообщение от BeginerMan Посмотреть сообщение
Перед тем как прописать :
если выделяете с помощью new[], то и освобождайте с помощью delete[], а не delete

C++
1
if(!m_model) return false;
new кидает исключение, так что до сюда не дойдет, если не удастся выделить память

Цитата Сообщение от BeginerMan Посмотреть сообщение
Нужно ли мне делать релиз интерфейсов ?
освобождение памяти с помощью delete[] лишь пометит участок как свободный и вызовет деструкторы содержащихся объектов.
DU
1479 / 1055 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
12.01.2014, 00:48     Удаление динамической памяти #3
Нужно ли мне делать релиз интерфейсов ?
Код C++
1
m_model[0].vertexBuffer->Release();
зависит от того, инициализированы ли эти интерфейсы.
если они были проинициализированы каким-нибудь методов выделения ресурса - то перед делете
их нужно как-то освободить. наверно вызовом релиз или еще как-то. delete это делать не будет.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
12.01.2014, 00:52     Удаление динамической памяти #4
Цитата Сообщение от BeginerMan Посмотреть сообщение
Нужно ли мне делать релиз интерфейсов ?
Цитата Сообщение от Croessmah Посмотреть сообщение
освобождение памяти с помощью delete[] лишь пометит участок как свободный и вызовет деструкторы содержащихся объектов.
Если память под vertexBuffer выделяется динамически удаляй ее в деструкторе. Почитай о std::shared_ptr & std::unique_ptr, они хорошенько упрощаю задачу управления динамической памятью.
BeginerMan
 Аватар для BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 423
12.01.2014, 10:59  [ТС]     Удаление динамической памяти #5
Ага, спасибо ребят.
Теперь понятно
Yandex
Объявления
12.01.2014, 10:59     Удаление динамической памяти
Ответ Создать тему
Опции темы

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