2017-02-02 6 views
0

を保持しています。のstd ::ベクトル<はstd :: shared_ptrの<Foo>>私は、基本クラスのアップデータを持ち、両方の動的および静的に割り当てFooの

class DispatchGroup { 
    std::vector<std::shared_ptr<Updater>> m_dispatchList; 
}; 

考えると派生クラス:私は無事DispatchGroupに参加できるUpdaterDerivateの静的に定義されたインスタンスを作成する必要がありますどのように

class UpdaterDerivate : public Updater {...}; 

:: m_dispatchListこれらは、にいくつかのバッチ更新を実行するために登録します?

初期化の順序は問題ではありません(DispatchGroupsは動的にしか作成できません)ので、m_dispatchListの破壊が静的に割り当てられたUpdaterDerivatesを破棄(および解放)しようとするのは避けてください。

struct NullDeleter // Or use <boost/core/null_deleter.hpp> 
{ 
    template<class T> 
    void operator()(T*) const { /* do nothing */ } 
}; 

そして:

答えて

1

は何もしませんデリータでそれを作成し

UpdaterDerivate a; 
std::shared_ptr<Updater> pa(&a, NullDeleter{}); 
+0

は、割り当てタイプを認識するようにshared_from_thisを()を使用しているすべての人を必要としないこと?または、何らかの形でshared_ptr内部を通して伝達されるディレターですか? – Speed8ump

+0

@ Speed8ump後者です。 –

+0

@ Speed8ump [std :: enable_shared_from_this](http://en.cppreference.com/w/cpp/memory/enable_shared_from_this):_タイプTのオブジェクトtがptという名前のstd :: shared_ptr によって管理されている場合、呼び出しT :: shared_from_thisは、tの所有権をpt._で共有する新しいstd :: shared_ptr を返します –

関連する問題