최적화 (Animal
에서 Dog
상속)을, 그리고 당신은 종종 동물을 기대하지만, 강아지의 인스턴스를 보내는 상황이 Animal
및 Dog
. 필자의 특별한 경우에는 동물성 기대 함수 (std::shared_ptr<Animal>
)에 강한 포인터 (std::shared_ptr<Dog>
)를 던지기도합니다.C++ reinterpret_cast 당신은 두 개의 클래스가
함수 매개 변수를 참조 (std::shared_ptr<Animal>&
, 스레드와 소유권 변경에 대한 우려로 인해 참조 포인터로 사용하지 않아야하는 이유에 대한 논증을 피할 수 있음)을 받아 들인다면 안전한 메모리라고 가정합니다. 을 사용하여 std::shared_ptr<Dog> dog
을 전송하려면 오른쪽을 클릭하십시오.
그렇다면 스레딩 문제 이외의 문제는 무엇이있을 수 있습니까? 참조 횟수 다양성과 같은
분명히 말하자면, 한 번 주조하는 것이 실제로 가능한 솔루션이 아닌 많은 경우에 사용되는 솔루션을 얻는 것이 목적입니다. 그것은 던져 져야 할 많은 객체가 있다는 것이 더 많은 이슈입니다. 또한 그 것을 무시하면 std::unique_ptr
이 더 나은 해결책 일 수도 있고 아닐 수도 있습니다. 제가 가상있는 일반화 된 시리얼 클래스 함수의 경우 원래 std::shared_ptr
을 변경할 수 없습니다 것입니다 일반 포인터를 사용하여 템플릿을 할 수 없습니다 -
왜 ['static_pointer_cast'] (http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast)를 사용하지 않습니까? – krzaq
오버 헤드를 피하려면. 내 특별한 경우에, 이것은 코드가 생성되는 곳입니다. 또는 상속의 여러 계층이 있고 위쪽으로 계속 캐스팅해야하는 사용자 지정 복사본 생성자를 만드는 경우 –
이 클래스는 상속과 관련이 있습니까? – Steve