は、コードのシンプルな作品を考えてみましょう:std :: unique_ptr <Dervied>からstd :: unique_ptr <Base>への変換にかかる費用はいくらですか?
class Base {};
class Derived : public Base {};
std::unique_ptr<Base> foo()
{
return std::make_unique<Derived>();
}
私はstd::unique_ptr
も同様に継承し、うまく関連する型の変換を管理して知っています。しかし、実際にはstd::unique_ptr<Base>
とstd::unique_ptr<Derived>
が無関係であり、継承ではなく変換によって、提供されたコードが可能であり(動作します)、本当ですか?
この場合、この変換にはコストが必要です。私はDerived&
からBase&
への変換が無料であると仮定します。このstd::unique_ptr
は私に多くの費用がかかりますか?
注:質問関数が存在するという仮定に基づいています。
- たくさん呼ばれ、
- は、上記の変換を経由して、あるいは汚れた方法で実装することができます。
return std::unique_ptr<Base>(new Derived());
、 - パフォーマンスはキングです。
このコードをWork As Expectedにするユーザー定義の変換があります。 C++のパワーは、このようなライブラリコンポーネントを自然に感じ取ることができ、言語自体の中で完全に行うことができるということです。 –