std::string 클래스에서 파생되는 것은 잘못된 관행입니까?
Effective C에서는 std:::에서 파생하지 않는 것이 좋습니다. 문자열 클래스에는 주로 가상 소멸자가 없기 때문입니다. 이러한 처리는 클래스가 기본 클래스로 적합하기 위한 특정 요구 사항과 관련하여 약간의 혼란을 야기했습니다.
클래스가 비다형성 기본 클래스 역할을 하려면 상속 자격이 있어야 한다는 가정과 달리 C 코드 재사용을 위한 대체 메커니즘을 제공합니다. 예를 들어, 프라이빗 상속은 믹스인이나 측면 지향 프로그래밍을 용이하게 할 수 있는 반면, 퍼블릭 상속은 다형성 시나리오에만 지정됩니다.
std::string에서 파생을 권장하지 않는 가장 큰 이유는 값 유형과 참조를 구별하는 데 있습니다. C의 유형. Java 및 C#과 달리 C 클래스는 값 유형입니다. 즉, 상속 작업 중에 값별 복사가 수행됩니다. 결과적으로 파생 클래스가 기본 클래스와 메모리 공간이 다를 때 슬라이싱 문제가 발생하여 예기치 않은 동작과 잠재적인 불일치가 발생합니다.
이 문제를 완화하려면 비멤버 및 비프렌드 함수를 우선적으로 처리해야 합니다. 기능 확장을 위해. 상속이 필요하다고 생각되는 경우 슬라이싱과 관련된 위험을 피하기 위해 구성 또는 템플릿 메타프로그래밍을 대신 사용해야 합니다.
요약하자면, std::string에서 파생하는 것은 가상 소멸자가 부족하고 C의 값 유형 상속과 관련된 고유한 복잡성.
비다형성 방지 사용법
기본 클래스가 다형성 목적이 아닌 코드 재사용만을 위한 것이라면 클라이언트가 포인터나 참조를 통해 직접 파생 클래스를 인스턴스화하는 것을 방지할 수 있는 간단한 메커니즘이 없습니다. 그러나 static_assert 또는 유형 특성 기술을 활용하면 부적합한 사용을 감지하기 위한 런타임 검사를 제공할 수 있습니다.
위 내용은 `std::string`에서 파생해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!