std::string에서 상속하는 것이 바람직하지 않은 이유
Effective C에서는 가상 소멸자는 다형성 동작을 나타내는 클래스의 능력에 매우 중요합니다. 따라서 std::string에 가상 소멸자가 없으면 사실상 파생이 금지됩니다. 이는 다음과 같은 질문으로 이어집니다. 클래스가 적절한 기본 클래스 자격을 얻으려면 어떤 추가 기준을 충족해야 합니까?
기본 클래스 상태 자격
암시된 가정과 반대 문제의 클래스는 기본 클래스 역할을 하기 위해 다형성을 지원할 필요가 없습니다. C의 상속은 두 가지 주요 목적을 제공합니다.
기본 클래스로서의 std::string
가상 소멸자가 없는 이유는 그 이상입니다. std::string은 기본 클래스, 다형성 또는 기타 기능으로 작동하도록 의도되지 않았습니다. 이는 C의 클래스 속성 때문일 수 있습니다.
클래스가 참조 유형인 다른 객체 지향 언어와 달리 C는 클래스를 값 유형으로 취급합니다. 결과적으로 기본 클래스 개체가 복사되면 해당 멤버만 복사되고 파생 클래스의 멤버는 복사되지 않습니다. 슬라이싱 문제로 알려진 이 현상은 불일치 및 잘못된 동작으로 이어질 수 있습니다.
따라서 메소드 확장을 위한 상속을 구현하는 것보다 C에서는 비친구, 비멤버 기능을 활용하는 것이 가장 좋은 방법이라고 간주됩니다. 또는 구성. 상속은 템플릿 메타 프로그래밍 또는 다형성 동작 설정을 위해 예약되어야 합니다.
비다형성 상속 방지
기본 클래스가 코드 재사용만을 목적으로 하는 경우에는 다음이 있습니다. 파생 클래스에 대한 포인터 생성을 방지하는 효과적인 방법이 없습니다. 그러나 비공개 상속을 사용하고 파생 클래스 메서드에 대한 액세스를 제한하며 공개 기본 클래스 메서드를 피하면 사용이 저해될 수 있습니다.
위 내용은 왜 `std::string`으로부터 상속을 피해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!