Dieser Code-Schnipsel ohne Fehler in Visual Studio 2013 (Version 12.0.31101.00 Update 4) kompiliert wirdC++ Compiler Error C2280 "versucht, eine gelöschte Funktion zu verweisen" in Visual Studio 2013 und 2015
class A
{
public:
A(){}
A(A &&){}
};
int main(int, char*)
{
A a;
new A(a);
return 0;
}
während Kompilierungsstatus mit diesem Fehler in Visual Studio 2015 RC (Version 14.0.22823.1 D14REL):
1>------ Build started: Project: foo, Configuration: Debug Win32 ------
1> foo.cpp
1>c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)': attempting to reference a deleted function
1> c:\dev\foo\foo.cpp(6): note: compiler has generated 'A::A' here
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
ich denke, dass der Compiler mit Visual Studio ausgeliefert 2015 den Copy-Konstruktor erzeugt und markiert sie als =delete
und so bekomme ich den Fehler C2280 (was ich übrigens nicht dokumentiert finden kann auf msdn.microsoft.com).
Jetzt sagen wir, ich habe eine Codebasis, die mit Visual Studio 2013 kompilierbar ist (und es funktioniert, weil es auf dem vom Compiler automatisch generierten Code beruht), aber nicht mit Visual Studio 2015 aufgrund von C2280 kompilierbar, wie kann ich beheben das Problem?
Ich dachte Klasse zu erklären A
auf diese Weise:
class A
{
public:
A(){}
A(A &&){}
A(const A&)=default;
};
bin ich etwas fehlt?
Zusammen mit dem 'A & operator = (A &&) ;' und 'A & operator = (const A &);' – Jagannath