Скажи, что я имею: < /p>
Код: Выделить всё
// Message.h
class Message
{
private:
std::array buffer;
std::queue
packets;
public:
Message(Packet p)
{
packets.push(std::move(p));
}
}
< /code>
Теперь у меня есть: < /p>
Packet p;
p
Пока конструктор сообщения все еще < /p>
Message(Packet p) // p is passed by value
Также обе эти работы:
Код: Выделить всё
Packet a;
Packet b;
Message mess1(std::move(a)); // no errors
Message mess2(b); // no errors
< /code>
Но я не вижу разницы. Первый предотвращает копию (даже с этим конструктором), а секунд разрешает копию? Или нет?Message(Packet&& c)
Я прав, что в этом случае не будет сделано никаких копий, и я в основном заставляю программиста использовать std :: move (a) иначе программа не будет компилировать?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ats-the-di