掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数のクラスを基底クラスのポインタで管理 (ID:71653)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
tetrapodさん >q=new ObjectB; v.push_back(q); >delete p; >単純にバグの元でしかないので根本的に設計を見直すほうがいい。 知り合いに聞いてみた所、シングルトンな管理用クラスを作って Objectのコンストラクタで管理用クラスにv.push_backをお願いしに行くような 形にして、Objectのデストラクタで同じように管理用クラスにv.eraseをしてもらうようにする方法を提案されたのですが。 (Objectのインスタンス生成時に管理用クラスのポインタをメンバ変数に保持しておく) それプラス、管理用クラスにaddObject() removeObject()という関数を用意しておいて、そちらでも管理の登録/解除をできるような形を考えたのですが、そういう手法はNGなのでしょうか。(v.eraseはイテレータを回してアドレスで対象を探す感じで) 趣味プログラマでノウハウが全然無いので、教えて頂けると嬉しいです。 Banさん >環境が分かりませんが、例えば最近のVCとかだとstd::tr1::shared_ptr >使えたりとかしますが、そういうのはどうですか。 ありがとうございます。そちらも検討してみます。 仲澤@失業者さん >他者から知らぬ所で配列内のオブジェクトを削除されたくないのなら、 >その配列自身が、そのオブジェクトの寿命を管理すればよいのでは >ないでしょうか 僕のレス上記参照お願いします。このような手法はNGなのでしょうか。教えて頂けると嬉しいです。 >別な方法としてデストラクタをprotectedにする案も考えられますが、 そこまで大がかり(?)にしたくない、ので、shared_ptr的な実装もしくは vectorを保持した管理用クラスに管理を依存する実装にしたいと思っています。 以上、レス遅れて申し訳ありませんでした。 返信して頂けるとありがたいです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.