Lidström의 주장은 구조 shared_ptr<Base> p(new Derived);
가 Base에 가상 소멸자를 필요로하지 않는다는 것입니다 .
Armen Tsirunyan : "정말? shared_ptr이 올바르게 정리 될까요?이 경우 어떻게 그 효과를 구현할 수 있는지 보여 주시겠습니까?"
Daniel Lidström : " shared_ptr 는 자체 소멸자를 사용하여 Concrete 인스턴스를 삭제합니다. 이것은 C ++ 커뮤니티 내에서 RAII로 알려져 있습니다. 제 조언은 RAII에 대해 가능한 모든 것을 배우는 것입니다. 사용하면 C ++ 코딩이 훨씬 쉬워 질 것입니다. 모든 상황에서 RAII. "
Armen Tsirunyan : "RAII에 대해 알고 있습니다. 또한 pn이 0에 도달하면 shared_ptr 소멸자가 저장된 px를 삭제할 수 있다는 것도 알고 있습니다. 그러나 px 에에 대한 정적 유형 포인터
Base
와에 대한 동적 유형 포인터 가있는 경우 가상 소멸자가Derived
없는 경우Base
정의되지 않은 동작이 발생합니다. 내가 틀렸다면 수정하십시오. "Daniel Lidström : " shared_ptr 은 정적 유형이 Concrete라는 것을 알고 있습니다. 생성자에 전달했기 때문에 이것을 알고 있습니다! 약간 마술처럼 보이지만 설계 상 매우 훌륭하다고 확신 할 수 있습니다."
그래서 우리를 판단하십시오. 가상 소멸자를 갖기 위해 다형성 클래스를 요구하지 않고 shared_ptr 을 구현하는 것이 어떻게 가능 합니까? 미리 감사드립니다