2014-12-04 6 views
-4

Я пытаюсь сделать это, чтобы уничтожить Products:C++ вектор разрушения очередей

vector < queue <Product*> > freshDeposit = ...; 
for(queue<Product*> q : freshDeposit){ 
    for (Product p : q) { 
     delete p; 
    } 
} 

, но это не работает! Вы можете мне помочь? Спасибо!

+2

«Продукт» не относится к типу «Продукт *». – juanchopanza

+3

Вы не можете удалить «Продукт p», потому что это не указатель. – deviantfan

+1

Auch! как быстро спускаются голоса с этими типами вопросов ... Даже когда они действительны. –

ответ

2

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

vector<queue<unique_ptr<Product>>> freshDeposit = ...; 
freshDeposit.clear(); 

Или, если вы хотите сохранить пустые очереди,

for(queue<unique_ptr<Product>> &q : freshDeposit) { 
    q.clear(); 
} 

Если вы действительно, действительно, хотите сохранить структуру данных, как есть, но только освободить Product объекты, то вы должны используйте deque вместо queue и позвоните по телефону reset() по указателям.

vector<deque<unique_ptr<Product>>> freshDeposit = ...; 
for(deque<unique_ptr<Product>> &q : freshDeposit) { 
    for(unique_ptr<Product> &p : q) { 
     p.reset(); 
    } 
} 
Смежные вопросы