С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
sysop999
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 64
#1

Освобождение памяти от экземпляра класса - C++

19.07.2012, 15:12. Просмотров 598. Ответов 5
Метки нет (Все метки)

есть класс : Message
есть контейнер типа :
C++
1
multimap<int,Message> myQueue
этот контейнер формируется так
C++
1
2
Message *c_message = new Message()
myQueue.insert(make_pair(any_value,*c_message))
Как удалить именно этот экземпляр класса обращаясь к контейнеру myQueue, если у нас есть его
C++
1
итерратор типа  : multimap<int,Message>::iterator map_it = myQueue1.begin();
Не могу понять, может быть в классе должна быть функция возвращающая this типа :
C++
1
2
3
4
Message *My_Pointer()
    {
        return this;
    }
а потом delete map_it->second.My_Pointer

Сорри, только учусь, если что
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2012, 15:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Освобождение памяти от экземпляра класса (C++):

Освобождение памяти в методе класса - C++
Здравствуйте, В университете дали задание написать написать стек с итератором произвольного доступа. Собственно, класс стека и итератора...

Освобождение памяти в деструкторе класса - C++
Перечитал по этому поводу много информации. Главный вопрос. Есть класс в котором происходит динамическое выделение памяти. В...

Освобождение памяти для члена класса - C++
Добрый вечер :victory: Проблема, чувствую, тривиальная, но что-то я не могу сообразить :coffee2: В моём самописном классе есть член...

Освобождение памяти для объектов производного класса - C++
Всем привет. Не могу найти инфу в интернете, всё перерыл, но понял что случай специфичный у меня. Придумал себе конструкцию, но не уверен,...

Написать инструкцию выделения памяти для одного экземпляра заданного класса (динамическая память) - C++
Дан класс и указатель: class X{ int a; public: X(int _a) {a = _a;} }; X *p; Напишите инструкцию выделения памяти для...

Создание нового экземпляра дочернего класса из экземпляра базового - C++
Всем привет! Извиняюсь, если вопрос глупый, но что-то не смог найти конкретный ответ на него... У меня есть несколько классов: все они...

5
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
19.07.2012, 15:30 #2
sysop999, вы передаёте в контейнер копию объекта созданного при помощи оператора new, а не указатель на объект. Переменная message и содержимое контейнера никак не связаны между собой.
0
sysop999
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 64
19.07.2012, 16:13  [ТС] #3
Цитата Сообщение от rangerx Посмотреть сообщение
sysop999, вы передаёте в контейнер копию объекта созданного при помощи оператора new, а не указатель на объект. Переменная message и содержимое контейнера никак не связаны между собой.
А можно попросить показать, как оно должно быть
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.07.2012, 17:00 #4
C++
1
2
multimap<int,Message> myQueue;
myQueue.insert(make_pair(any_value, Message()));
для удаления из мапины по итератору есть функция erase
http://www.cplusplus.com/reference/stl/multimap/erase/
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2012, 17:19 #5
вариант с простыми укзателями
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <utility>
#include <map>
 
class Message {
public:
   ~Message()
   {
      std::cout << "Message d-tor called\n";
   }
};
 
template< class AssociativeSTLContainerType >
void deleteAllValues(AssociativeSTLContainerType& container)
{
   typedef typename AssociativeSTLContainerType::iterator iterator;
   
   iterator first = container.begin();
   iterator last  = container.end();
   
   while (first != last)
   {
      delete first->second;
      first->second = 0;
      ++first;
   }
}
 
int main()
{
   std::multimap<int, Message*> myQueue;
   myQueue.insert(std::make_pair(100, new Message()));
   myQueue.insert(std::make_pair(100, new Message()));
   myQueue.insert(std::make_pair(500, new Message()));
   myQueue.insert(std::make_pair(100500, new Message()));
   
   deleteAllValues(myQueue);
}
1
sysop999
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 64
19.07.2012, 22:58  [ТС] #6
Спасибо все сделал =)
0
19.07.2012, 22:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2012, 22:58
Привет! Вот еще темы с ответами:

При создании экземпляра класса, создается 2 экземпляра вместо 1 - C++
Подсчет экземпляров ведется с помощью статического члена num_dogs, который во всех трех конструкторах (1. по умолчанию, 2. со всеми...

Сложение экземпляра базового класса и экземпляра наследника - C++
Добрый вечер! Моя задача - сложить экземпляр базового класса и наследника. Нужно сделать так, чтобы результат сложения &quot;знал&quot;...

резервирование памяти/освобождение памяти для трехмерного массива - C++
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены по 16 байт. Есть две проблемы: ...

Удаление экземпляра класса в функции самого класса (Ошибка при отладке) - C++
Допустим, у нас есть класс Buffer, который хранит в себе указатель на класс некоторой матрицы и количество этих указателей refcounter ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.