Этот фрагмент скомпилирован без ошибок в Visual Studio 2013 (версия 12.0.31101.00 Update 4)
class A
{
public:
A(){}
A(A &&){}
};
int main(int, char*)
{
A a;
new A(a);
return 0;
}
пока он скомпилирован с этой ошибкой в Visual Studio 2015 RC (версия 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 ==========
Я думаю, что компилятор, поставляемый с Visual Studio 2015, генерирует Copy Constructor и отмечает его как =delete
, и поэтому я получаю ошибку C2280 (которая, кстати, я не могу найти документально на msdn.microsoft.com).
Теперь скажем, что у меня есть кодовая база, которая компилируется с Visual Studio 2013 (и она работает, потому что она опирается на код, сгенерированный автоматически компилятором), но не компилируемая с Visual Studio 2015 из-за C2280, как я могу исправить проблема?
Я думал объявить класс A
следующим образом:
class A
{
public:
A(){}
A(A &&){}
A(const A&)=default;
};
Мне что-то не хватает?