Herb Sutter の C++ ガイドラインに従おうとしています。この場合は、unique_ptr
生のポインターとshared_ptr
. を支持する議論の 1 つは、ある時点で必要になった場合のstd::unique_ptr
変換可能性です。shared_ptr
私の場合、vector
ofunique_ptr
を取るメソッドに渡す必要があるvector
of があり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();
}
これを行うより良い方法はありますか?