2014-12-08 11 views
1

주로 컴파일러 생성 함수 (기본 생성자, 복사 생성자, 할당 연산자, 이동 할당, 소멸자)를보고 싶습니다.
컴파일러가 나를 위해 생성 된 함수를보고 싶습니다.클래스의 모든 기능을 보려면 어떻게해야합니까?

나는 이것을 기호 테이블에서 볼 수 있다고 생각했지만 심볼 테이블에서 이름을 맹 글링하는 데 문제가 있습니다. 내가 정의한 다른 함수를 볼 수 있지만 생성자를 찾는 방법을 모르겠습니다.

어떤 함수가 클래스와 연결되어 있는지 확인하는 더 좋은 방법이 있습니까? 당신의 생각에 문제가있다

+1

이 비슷한 스레드가 가까이 오길 바랍니다. [** link **] (http://stackoverflow.com/questions/3526546/get-the-list-of-methods-of-a-class) – saikumarm

답변

2

:

허용 할 때 컴파일러는 암시 특수 기능을 선언합니다.
그러나 ODR이 사용되는 경우 은 암시 적으로으로 정의됩니다.

또한 인라인되었을 수 있으므로 찾을 기호가 없을 수 있습니다.

따라서 컴파일러에서 필요에 따라 생성하는 함수를 찾아내는 가장 안전한 방법은이를 사용하려고하는 것입니다.
규칙을 알고 수동으로 검사하면 충분하지만 충분히 쉽습니다.

+0

고맙습니다. 실제로 이것을 확인하는 좋은 방법이 아닌 것 같습니다. 어쩌면 분해를봤을까요? 어딘가에 점프 (JUMP) 통화가 있는지 확인하십시오. – madu

+1

@madu : 암시 적 특수 함수는 컴파일러가 필요하지 않았거나 모든 사용이 인라인 되었기 때문에 존재하지 않을 수도 있기 때문에 찾을 수있는 것이 없습니다. – Deduplicator

+0

감사합니다. 다른 경우가 있음을 이해합니다. 제가보고 싶었던 것은 적어도 빈 클래스를 가지는 것이 었습니다.이 경우 생성 된 함수가 없을 것입니다. 그러나 가상 함수를 추가하면 컴파일러에서 vtable을 생성하는 생성자를 배치합니다 (예를 들어). 컴파일러가 const를 생성 한이 경우를보고 싶었습니다. 나를 위해. 하지만 당신이 말했듯이, 그것은 인라인 될 수 있습니다. – madu