Home > Backend Development > C++ > body text

Why Does Visual Studio 2015 Throw Error C2280 \'attempting to reference a deleted function\' When Compiling Code That Works in Visual Studio 2013?

Barbara Streisand
Release: 2024-10-27 04:00:29
Original
792 people have browsed it

Why Does Visual Studio 2015 Throw Error C2280

C Compiler Error C2280 "attempting to reference a deleted function" in Visual Studio 2013 and 2015

The C compiler in Microsoft Visual Studio 2013 and 2015 handles copy constructors and assignment operators differently.

Visual Studio 2013

If a copy constructor or move assignment operator is not explicitly declared in the class definition, the compiler will implicitly generate them.

Visual Studio 2015

However, in Visual Studio 2015, if a class definition includes a move constructor or move assignment operator, the implicitly declared copy constructor is defined as deleted.

Problem Statement

The following code compiles successfully in Visual Studio 2013 but generates error C2280 in Visual Studio 2015:

<code class="cpp">class A
{
public:
   A(){}
   A(A &&&) {}
};

int main(int, char*)
{
   A a;
   new A(a);
   return 0;
}</code>
Copy after login

C2280: 'A::A(const A &)' attempting to reference a deleted function

Resolution

To fix this error in Visual Studio 2015, one needs to explicitly declare the copy constructor and move assignment operator, or use the default constructor:

Option 1: Explicitly Declare Copy Constructor and Move Assignment Operator

<code class="cpp">class A
{
public:
   A(){}
   A(A &&&) {}
   A(const A&) = default; // Default copy constructor
   A& operator=(const A&) = default; // Default move assignment operator
};</code>
Copy after login

Option 2: Define Class as Deleted or Incomplete

<code class="cpp">class A
{
public:
   A(){}
   A(A &&&) = delete; // Mark copy constructor as deleted

   A(const A&); // Incomplete constructor (cannot be instantiated)
   A& operator=(const A&); // Incomplete assignment operator (cannot be instantiated)
};</code>
Copy after login

The above is the detailed content of Why Does Visual Studio 2015 Throw Error C2280 \'attempting to reference a deleted function\' When Compiling Code That Works in Visual Studio 2013?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!