컴파일러 생성 함수, 3의 규칙 및 5의 규칙에 대해 알고 있습니다. 실제 시나리오에서는 컴파일러가 실제로 생성 한 컴파일러 생성 함수 (생성자, 할당 연산자, 소멸자)를 정확히 파악하는 것이 쉽지 않을 수 있습니다.
특정 클래스에 대해 컴파일러 생성 함수를 나열하는 방법이 있습니까?
나는 주로 Visual Studio 2019 및 Xcode에 관심이 있지만 일반적인 솔루션은 훨씬 더 환영받을 것입니다.
답변
규칙은 복잡합니다. Howard Hinnant의 프레젠테이션 에서 인용 한 다른 답변에서 훔칠 것 입니다.
여기서의 교훈은 좋은 관행은 컴파일러 암시 적 선언에 의존하지 않고 모든 특수 멤버를 명시 적으로 선언하는 것입니다 (필요에 따라 기본값 또는 삭제됨)
답변
“특정 클래스에 대한 컴파일러 생성 함수를 나열 할 수있는 방법이 있습니까?”
물론 있습니다. 에 리눅스 (와 다른 유닉스 시스템)를 사용할 수 있습니다 nm
, readelf
그리고 objdump
에 생성 된 오브젝트 파일 / 라이브러리 / 모든 수출 문자 (등을)을 분해하고 검사 실행.
Windows 에는 비슷한 도구가 있지만, 내가 사용하는 플랫폼이 아니기 때문에 불행히도 정확한 도구 이름을 지정할 수는 없습니다.