경고 C26432
If you define or delete any default operation in the type 'type-name', define or delete them all (c.21).
C++ 핵심 지침:
C.21: 기본 작업을 정의하거나 삭제하는 경우 모두 정의하거나 삭제합니다.
생성자와 같은 특수 작업은 특정 시나리오를 자동으로 적용하기 위해 언어 메커니즘에 더 많이 의존하도록 형식의 동작을 변경하는 것으로 간주됩니다. 정식 예제는 리소스 관리입니다. 이러한 특수 작업을 명시적으로 정의, 기본값 또는 삭제하면 형식의 특수한 처리를 방지하려는 메시지가 표시됩니다. 다른 작업을 지정되지 않은 상태로 두는 것은 일관성이 없습니다. 즉, 컴파일러에서 삭제된 것으로 암시적으로 정의됩니다.
설명
이 검사 다음 작업을 특수로 처리하는 5개의 규칙을 구현합니다.
- 복사 생성자,
- 이동 생성자,
- 복사 할당 연산자,
- 이동 할당 연산자 및
- 소멸자.
작업이 동일한 방식으로 정의된 경우 규칙은 검사 않습니다. 삭제된 작업과 기본값을 명시적으로 정의된 작업과 혼합해도 됩니다. 그러나 모든 항목을 지정하는 경우 모두 지정해야 합니다.
액세스 수준은 중요하지 않으며 혼합될 수도 있습니다.
경고는 형식당 한 번씩 형식의 첫 번째 비정적 함수 정의에 플래그를 지정합니다.
예시
이 예제에서는 warning::S
기본 생성자 및 소멸자만 정의합니다. 이 선언은 no_warning::S
5개의 특수 멤버 함수를 모두 정의하거나 삭제합니다.
// C26432.cpp
namespace warning
{
struct S
{
S() noexcept { ++_count; }
~S() { --_count; } // C26432 because only the constructor and destructor are explicitly defined.
static unsigned _count;
};
unsigned S::_count = 0;
}
namespace no_warning
{
struct S
{
S() noexcept { _count++; }
S(const S&) = delete;
S(S&&) = delete;
S& operator=(const S&) = delete;
S& operator=(S&&) = delete;
~S() { --_count; }
static unsigned _count;
};
unsigned S::_count = 0;
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기