>백엔드 개발 >C++ >C 라이브러리에 생성자 기호가 두 개 있는 이유는 무엇입니까?

C 라이브러리에 생성자 기호가 두 개 있는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-28 17:50:10677검색

Why Are There Two Constructor Symbols in C   Libraries?

C 라이브러리에서 생성자 기호의 이중 정의

C에서 생성자 정의는 nm로 검사할 때 라이브러리에 두 번 나타납니다. 이는 다형성 지원을 위해 여러 생성자 항목이 필요한 Itanium C ABI 때문입니다.

생성자의 잘못된 이름은 해당 목적을 나타냅니다.

  • C1: 완전한 개체 생성자
  • C2: 기본 개체 생성자

클래스에 가상 기본이 없더라도 클래스의 경우, GCC는 ABI의 다형성 지원 결과로 두 생성자를 모두 내보냅니다. 이 동작은 GCC에서 알려진 문제로 간주되며, 다형성이 포함되지 않은 경우 컴파일러가 이 동작을 잠재적으로 최적화할 수 있습니다.

다양한 유형의 생성자에는 다음과 같은 의미가 있습니다.

  • 완전한 객체 생성자: 가상 베이스를 포함한 전체 객체를 생성합니다. 클래스.
  • 기본 객체 생성자: 객체 자체를 생성하고 데이터 멤버와 비가상 기본 클래스를 초기화합니다.
  • 객체 생성자 할당: 아님 흔히 볼 수 있는, 완전한 객체 생성자의 작업을 수행하고 연산자를 사용하여 추가로 메모리를 할당합니다. new.

생성자 기호의 이중 방출은 일반적으로 문제를 일으키지 않지만 nm과 같은 도구를 사용하여 라이브러리 기호를 검사할 때 혼란을 초래할 수 있습니다.

위 내용은 C 라이브러리에 생성자 기호가 두 개 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.