2015-02-25 2 views
-4

Я пишу класс Queue. У меня есть две версии push_back для нового стандарта C++ 11. Одна из этих версий использует параметр rvalue в качестве параметра. Моя версия работает, но я думаю, что это должно быть что-то не хватает:R-value Ссылка push_back Функция

97 template <typename T> 
98 void Queue<T>::push(T && val) 
99 { 
100  c.push_back(val); 
101 } 

Кажется, я должен использовать зЬй :: двигаться, но я не уверен, как это реализовать. c в вышеуказанной функции относится к объекту deque, инкапсулированному в моем классе Queue. Любая помощь в понимании того, что я должен сделать, чтобы построить эту функцию, была бы очень признательна!

+4

Что так сложно о передаче '' val' через станд :: move'? – Deduplicator

+0

Я не знал, что это возможно. Итак, мой вызов push_back может быть: c.push_back (std :: move (val))? –

+1

Да, и так должно быть. В стороне, никогда не вставляйте номера строк. Они ломают копию. – Deduplicator

ответ

1

Да, вам нужно std::move здесь, но вы также можете использовать emplace_back здесь:

template <typename T> 
void Queue<T>::push(T && val) 
{ 
    c.emplace_back(std::move(val)); 
} 
Смежные вопросы