Visual Studio 2015의 컴파일러 오류 C2280 "삭제된 함수 참조 시도"
Visual Studio 2015 컴파일러는 2013 이전 버전과 달리 이동 생성자 또는 이동 할당 연산자를 정의하는 클래스에 대해 삭제된 복사 생성자를 자동으로 생성합니다. 이 동작은 이동이 선호되는 상황에서 실수로 복사되는 것을 방지하기 위해 C 표준에 의해 요구됩니다.
코드 조각에서 클래스 A에는 이동 생성자 A(A &&)가 있으며 이는 차례로 삭제된 복사본을 의미합니다. 표준에 따라 생성자. 결과적으로, 기본 트리거의 새 A(a) 표현식은 오류 C2280을 트리거합니다.
이 문제를 해결하려면 A:
class A {
public:
A() {}
A(A &&) {}
A(const A&) = default; // Explicitly declare the copy constructor as defaulted
};
또는 실제로 복사를 비활성화하고 이동만 허용하려는 경우 복사 생성자와 복사 할당 연산자를 삭제된 것으로 선언할 수 있습니다.
class A {
public:
A() {}
A(A &&) {}
A(const A&) = delete;
A& operator=(const A&) = delete; // Delete copy assignment operator
};
복사를 비활성화하려는 경우 5의 법칙을 준수하기 위해 이동 할당 연산자와 소멸자도 선언해야 한다는 점을 기억하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3