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

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

Восстановить пароль Регистрация
 
BeginerMan
 Аватар для BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 418
12.01.2014, 00:12     Удаление динамической памяти #1
Всем здрасьте.
Имеется вот такая структура.
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();
Или можно сразу не задумываясь просто удалять память ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
12.01.2014, 00:15     Удаление динамической памяти #2
Цитата Сообщение от BeginerMan Посмотреть сообщение
Перед тем как прописать :
если выделяете с помощью new[], то и освобождайте с помощью delete[], а не delete

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

Цитата Сообщение от BeginerMan Посмотреть сообщение
Нужно ли мне делать релиз интерфейсов ?
освобождение памяти с помощью delete[] лишь пометит участок как свободный и вызовет деструкторы содержащихся объектов.
DU
1477 / 1053 / 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
Сообщений: 418
12.01.2014, 10:59  [ТС]     Удаление динамической памяти #5
Ага, спасибо ребят.
Теперь понятно
Yandex
Объявления
12.01.2014, 10:59     Удаление динамической памяти
Ответ Создать тему
Опции темы

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