Chciałbym wyłączyć konstruktor ruchu w klasie. Zamiast poruszać się, chciałbym oprzeć się na konstruktorze kopii. Kiedy próbuję napisać ten kod:Wyłączanie konstruktora ruchu
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
Boo(Boo&& boo) = delete;
};
Boo TakeBoo()
{
Boo b;
return b;
}
podczas kompilacji otrzymałem błąd:
error C2280: 'Boo::Boo(Boo &&)': attempting to reference a deleted function
Jak mogę wyłączyć konstruktora ruch i siły kopie zamiast?
prostu nie przeciążyć konstruktora ruch i kompilator nie wygeneruje konstruktora ruch dla niego, ponieważ nie jest już konstruktor kopia –
od standardu: „Jeżeli definicja klasy X nie jawnie zadeklarować konstruktor ruchu, jeden będzie domyślnie zadeklarowany jako domyślny wtedy i tylko wtedy, gdy X nie posiada deklarowanego przez użytkownika konstruktora kopiowania [...] Gdy konstruktor ruchu nie jest domyślnie zadeklarowany lub jawnie dostarczony, wyrażenia, które w przeciwnym razie wywołałyby ruch konstruktor może zamiast tego wywołać konstruktora kopii. " – Pixelchemist
Co masz nadzieję osiągnąć przez to? W żaden sposób nie ma to żadnego znaczenia. –