static_pointer_cast
をunique_ptr
とすると、含まれているデータの共有所有権につながることをご理解ください。他の点で
は、私は何をしたいのは、次のとおりです。static_pointer_castの代わりにunique_ptr
unique_ptr<Base> foo = fooFactory();
// do something for a while
unique_ptr<Derived> bar = static_unique_pointer_cast<Derived>(foo);
はとにかくそれが単に禁止されているように、2つのunique_ptr
との結果が、同時に存在してはならないということをやって。
実際、static_unique_pointer_cast
のようなものは存在しません。
これまでのところ、これらの基本クラスへのポインタを格納する場合、それらをいくつかの派生クラスにキャストする必要があります(例として、タイプ消去に関するシナリオを想像してください)。私はshared_ptr
を使用しました。私が上で述べたことのために。
とにかく、このような問題のためにshared_ptr
に代わるものがあるかどうか、あるいはそのような問題が実際には最高の解決策であるかどうかを推測していました。
' static_pointer_cast'は 'std :: shared_ptrタイプの引数に対してのみ定義されています' - それは 'unique_ptr'で全く使用できません –
@MMはい、私は知っています。 'unique_ptr'のために。 – skypjack
タイプ消去がダウンキャストにつながるのはなぜですか?基底クラスを派生型にキャストする必要がある場合は、非常に少数のケースを除いて、ほとんど例外なく、異なる問題を解決する必要があります。 – Jens