Как освободить память, занятую очередью (STL)? - PullRequest
0 голосов
/ 20 июня 2019

Я работаю над вопросом, связанным с большим количеством очередей, и мне стало любопытно, что для того, чтобы освободить память для неиспользуемой очереди, достаточно ли опустошить очередь (выскочить) или я должен сделать что-то еще?

Пробовал использовать 'free', но получил ошибку.

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Будьте осторожны с указателями.

Поппинг должен быть достаточным, так как классы STL управляют своими собственными ресурсами, например,

queue <int> g;

g.push(10); 
g.push(20); 
g.push(30); 

while (!g.empty()) 
{  
    g.pop(); 
} 

Ссылка от GeeksforGeeks

0 голосов
/ 21 июня 2019

std :: queue - это просто оболочка вокруг других типов контейнеров STL, по умолчанию std :: deque, но также возможно std :: list или std :: vector.Когда ваша очередь выходит из области видимости, автоматически запускается деструктор нижележащего контейнера.

Если вы хотите вручную освободить память, занятую очередью, и тип данных вашей очереди является примитивным (int, float, ...) или имеет правильный деструктор (большинство, если не все типы данных STL), вы можете сделать это в C ++ 11 и более поздних версиях:

std::queue<your_type>().swap(your_queue);

или для более старых версий:

{
    std::queue<your_type> temp;
    std::swap(temp, your_queue);
}

Он создает пустую очередь, обменивает ее содержимое с вашей очередью и уничтожает ее (потому что она выходит из области видимости сразу после обмена), оставляя в руке только пустую.

Если вы используете очередь нестандартного типа, у которой нет надлежащего деструктора, я думаю, что единственный способ - это вытащить элементы один за другим и вручную освободить память всплывающего элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...