を最適化するために、次の2つのクラスAnimal
とDog
を(Animal
からどこDog
継承)持っている、とあなたは、多くの場合、動物を期待しているが、犬のインスタンスを送信している状況があります。私の場合、私はしばしば、動物の期待機能(std::shared_ptr<Animal>
)に強いポインタ(std::shared_ptr<Dog>
)を投げかけています。C++ reinterpret_castは:: shared_ptrの参照
関数のパラメータを参照(std::shared_ptr<Animal>&
、スレッドで所有権を変更することの懸念から参照パラメータとして強力なポインタを持たないべき理由を避けるため)をすることができると受け入れる場合、私は安全なメモリ「reinterpret_cast<std::shared_ptr<Animal>&>(dog)
」を使用して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