Wspólny wzór w C++ jest, aby prywatny konstruktor kopia:Czy konstruktor prywatnego ruchu uniemożliwia przeniesienie?
class A
{
public:
// ...
private:
A(const A&);
};
Ale następujący kod następnie skompilować (w C++ 11/14):
A f();
auto a = f();
Standard zawiera informacje o automatycznym generowaniu konstruktorów ruchu. Nie mam dostępu do standardu ani kompilatora, który faktycznie generuje konstruktory ruchu. Moje pytanie brzmi: czy muszę napisać:
class A
{
public:
// ...
private:
A(const A&);
A(const A&&);
};
, aby zapobiec poruszaniu się (i operatorom = analogicznie)?
Jeśli napiszesz konstruktor kopiowania, to nie wygenerujesz konstruktora ruchu. –
Użytkownik deklarujący kopię ctor zapobiega generowaniu elementów przenoszenia. – Xeo
Zauważ, że wzorzec, do którego odnosisz się jest przeznaczony dla C++ 98/03, ale jest teraz przestarzały w C++ 11 dzięki możliwości 'delete' konstruktorów/operatorów przypisania (np.' ClassName (ClassName &&) = delete; 'jawnie zapobiegać niejawnemu konstruktorowi ruchu). – syam