Herb Sutter の C++ ガイドラインに従おうとしています。この場合は、unique_ptr生のポインターとshared_ptr. を支持する議論の 1 つは、ある時点で必要になった場合のstd::unique_ptr変換可能性です。shared_ptr
私の場合、vectorofunique_ptrを取るメソッドに渡す必要があるvectorof がありshared_ptrます。私は次のようなものを書くことができることを望んでいました:
for (auto &uniquePtr : vectorUnique)
vectorShared.push_back(make_shared<Abstract>(move(uniquePtr));
これにより、Xcode 7.1ベースのツールチェーンが構成されていると、次のエラーが発生しC++11ます。
エラー: フィールド タイプ 'Abstract' は抽象クラスです。
Abstractを使用すると、STL が型の具体的なインスタンスを保持しようとしているようmake_sharedです。そのため、多くの場合、Sutter 氏のアドバイスは役に立たないように思われるので、何か間違ったことをしているに違いないと確信しています。私は書くことに頼りました:
for (auto &uniquePtr : vectorUnique) {
auto ptr = uniquePtr.get();
auto shared = shared_ptr<Abstract>(ptr);
vectorShared.push_back(shared);
uniquePtr.release();
}
これを行うより良い方法はありますか?