• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:継承されたABのクラスのポインタを切り替えたい)

継承されたABのクラスのポインタを切り替えたい

このQ&Aのポイント
  • 継承されたABのクラスのポインタをスムーズに切り替える方法を教えてください
  • DATA_AとDATA_Bを継承したクラスのポインタを効率的に切り替える方法はありますか?
  • クラスのポインタを効率的に切り替える方法を教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

一応念のため書いておくと, まず最初に考えつくパターンは DATA_A::Update や DATA_B::Update では「(必要なら) new するけど delete はしない」ようにして if (DATA *ptmp = pData->Update()) { delete pData; pData = ptmp; }else break; のような形. これだとタイミング的に new→delete になるので例外に対する安全性も増します. ここで std::shared_ptr を使うと std::shared_ptr<DATA> pData; .... if (! (pData = pData->Update())) break; に変わります (delete は std::shared_ptr<DATA>::operator = で自動的に行われるのでプログラムの字面から消える). もっといえば, ラッパクラス class Foo { public: .... void Update() { pData = pData->Update(); } operator std::shared_ptr<DATA>() const { return pData; } std::shared_ptr<DATA> operator ->() const { return operator std::shared_ptr<DATA>(); } DATA &operator *() const { return *operator std::shared_ptr<DATA>(); } bool operator !() const { return ! operator std::shared_ptr<DATA>(); } private: std::shared_ptr<DATA> pData; }; を用意するという手もあって, ここまでやると Foo data; ... data.Update(); if (! data) break; だけですみます.

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ん~, なんでこんなことをしたいのかがよくわからないなぁ.... とりあえず std::shared_ptr でも使う?

sanato
質問者

お礼

回答ありがとうございます。 中身の違うDATAを更新し続けるような構造にしたいと思ったので・・・。段階を切り替えながら常に更新するような感じです。 聞いたことのない名前が出てきたのでちょっと調べてみます。

すると、全ての回答が全文表示されます。

関連するQ&A