Если мы создадим map<int,int>
, мы можем его очистить, но он все еще остается в памяти, не так ли? Например.Как разрушить карту и заполнить указатель карты в C++?
#include <map>
using namespace std;
int main(){
map<int,int> myMap;
myMap[1] = 2;
myMap.clear();
return 0;
}
Но если мы устанавливаем указатель вместо фактического map
, я мог бы уничтожить его с delete
, но я не мог заполнить карту на один и тот же путь:
#include <map>
using namespace std;
int main(){
map<int,int> *myMap = new map<int,int>;
// myMap[1] = 2;
delete myMap;
return 0;
}
раскомментирован myMap[1] = 2;
концы линии с ошибкой:
[email protected]:~$ g++ test.cpp test.cpp: In function ‘int main()’: test.cpp:8:14: error: no match for ‘operator=’ (operand types are ‘std::map’ and ‘int’) myMap[1] = 2; ^ In file included from /usr/include/c++/5/map:61:0, from test.cpp:2: /usr/include/c++/5/bits/stl_map.h:296:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>& std::map<_Key, _Tp, _Compare, _Alloc>::operator=(const std::map<_Key, _Tp, _Compare, _Alloc>&) [with _Key = int; _Tp = int; _Compare = std::less; _Alloc = std::allocator >] operator=(const map& __x) ^ /usr/include/c++/5/bits/stl_map.h:296:7: note: no known conversion for argument 1 from ‘int’ to ‘const std::map&’
Как самоуничтожению в C++ в map
? Разве это «разрушительно»?
Также, как инициализировать/заполнить значения указателя map<>
?
'(* MyMap) [1] = 2; 'делает трюк, если вы используете' new'. Остальное находится в ответе CinCout ниже – GMichael
По той же причине 'int * i = new int (0); i + = 5; delete i; 'не добавляет 5 в' int'. – immibis
* «Если мы создадим карту', мы можем ее очистить, но она по-прежнему остается в памяти, верно? »* Сам объект управления картой (который, вероятно, один или два десятка байтов, в зависимости от того, компилируя 32-битное или 64-битное приложение и добавляя ли добавление данных «map» к поддержке отладки), но память для элементов данных, которую хранит «карта», будет выпущена для повторного использования приложением. В общем, очень редко стоит делать больше, чем «ясно» на «карте». Это контрастирует с «вектором», который имеет тенденцию зависать в памяти, где хранятся элементы. –