у меня есть этот пример кода:станд :: перейти к функции
#include <iostream>
class Struct {
public:
Struct() { std::cout << "0" << std::endl; }
Struct(Struct&) { std::cout <<"1"<<std::endl;}
Struct(const Struct&) { std::cout << "2" << std::endl; }
};
class Struct2 {
public:
Struct s;
Struct2() {}
void setMember(const Struct& aux) { s = aux; }
};
int main()
{
Struct s;
Struct2 s2;
s2.setMember(s);
}
// http://coliru.stacked-crooked.com/a/dd57e8af23f6db4b
Doubt 1:
Он Printting два 0, так как конструктор в основной и конструкции элемента of Struct2.
Дело в том, что я ожидал трех 0, потому что «setMember» получает копию 's', правильно? Что происходит?
Сомнение 2:
Я думал в это положить:
s2.setMember(std::move(s));
Как я не буду использовать 'S' снова, но setMember не имеет '& &' указано, Это нормально? Нужно ли мне это делать? :
s = std::move(aux);
Или с одним из основных достаточно?
Сомнение 3:
std::vector<A> vectorA;
int main()
{
A a;
// modifies a ...
vectorA.push_back(std::move(a));
}
Является ли это правильно? Я оптимизирую что-нибудь движущееся? Он не будет использоваться больше, и я хочу, чтобы держать его в векторе
Благодарности
Передача аргументов в качестве ссылки - это полная противоположность от передачи как значения (копия). здесь, не ваш c.tros передает аргумент по значению. –
Если вы не понимаете механизм передачи по ссылке, возможно, вам стоит прочитать немного больше о базовом C++ перед погружением в семантику перемещения. – undu