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

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

Восстановить пароль Регистрация
 
sysop999
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 64
19.07.2012, 15:12     Освобождение памяти от экземпляра класса #1
есть класс : 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

Сорри, только учусь, если что
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
19.07.2012, 15:30     Освобождение памяти от экземпляра класса #2
sysop999, вы передаёте в контейнер копию объекта созданного при помощи оператора new, а не указатель на объект. Переменная message и содержимое контейнера никак не связаны между собой.
sysop999
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 64
19.07.2012, 16:13  [ТС]     Освобождение памяти от экземпляра класса #3
Цитата Сообщение от rangerx Посмотреть сообщение
sysop999, вы передаёте в контейнер копию объекта созданного при помощи оператора new, а не указатель на объект. Переменная message и содержимое контейнера никак не связаны между собой.
А можно попросить показать, как оно должно быть
DU
1477 / 1053 / 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/
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 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);
}
sysop999
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 64
19.07.2012, 22:58  [ТС]     Освобождение памяти от экземпляра класса #6
Спасибо все сделал =)
Yandex
Объявления
19.07.2012, 22:58     Освобождение памяти от экземпляра класса
Ответ Создать тему
Опции темы

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