[c++] 컴파일러가 생성 한 함수를 찾는 방법은 무엇입니까?

컴파일러 생성 함수, 3의 규칙 및 5의 규칙에 대해 알고 있습니다. 실제 시나리오에서는 컴파일러가 실제로 생성 한 컴파일러 생성 함수 (생성자, 할당 연산자, 소멸자)를 정확히 파악하는 것이 쉽지 않을 수 있습니다.

특정 클래스에 대해 컴파일러 생성 함수를 나열하는 방법이 있습니까?

나는 주로 Visual Studio 2019 및 Xcode에 관심이 있지만 일반적인 솔루션은 훨씬 더 환영받을 것입니다.



답변

규칙은 복잡합니다. Howard Hinnant의 프레젠테이션 에서 인용 한 다른 답변에서 훔칠 것 입니다.

여기에 이미지 설명을 입력하십시오

여기서의 교훈은 좋은 관행은 컴파일러 암시 적 선언에 의존하지 않고 모든 특수 멤버를 명시 적으로 선언하는 것입니다 (필요에 따라 기본값 또는 삭제됨)


답변

“특정 클래스에 대한 컴파일러 생성 함수를 나열 할 수있는 방법이 있습니까?”

물론 있습니다. 에 리눅스 (와 다른 유닉스 시스템)를 사용할 수 있습니다 nm, readelf그리고 objdump에 생성 된 오브젝트 파일 / 라이브러리 / 모든 수출 문자 (등을)을 분해하고 검사 실행.

Windows 에는 비슷한 도구가 있지만, 내가 사용하는 플랫폼이 아니기 때문에 불행히도 정확한 도구 이름을 지정할 수는 없습니다.


답변

이것은 현재 부분적인 답변 일뿐입니다.

Visual Studio 2019

생성자

클래스 객체를 정의 할 때 Visual Studio의 IntelliSense 함수는 컴파일러에서 생성 한 것과 직접 생성 한 사용 가능한 생성자를 보여줍니다.

여기에 이미지 설명을 입력하십시오

불행히도이 정보가 항상 나오지는 않습니다. 위의 스크린 샷에서 작동하게하려면 괄호 안에 무언가를 입력해야하므로 쉼표로 입력하십시오.


답변