![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
現在設計の段階なのですが、あるクラスが循環参照に陥りそうで実装に踏み切れません。
現在の状況で循環参照の問題が発生するのか、またどのような開発が循環参照の問題になるのか、教えていただきたいと思います。
現在の状況は、
mainにControlというクラスが実体で多重度1で持たれている。
ControlにDeviceというクラスが多重度0..nでポインタでもたれている。
DeviceというクラスはControlというクラスの参照を持つ。
このような状況になっています。
問題の関係はControlとDeviceです。
このような状況に詳しい方がいらっしゃいましたら、回等をお願いいたします。
No.2ベストアンサー
- 回答日時:
コード上は問題ないので、個人的な印象だけ。
このままの設計だと、Control と Device の結合が強すぎるように思います。Device から見て自分が「格納される」オブジェクト(つまり Control)の情報が欲しいというケースはよくありますが、こういう場合は Device が必要とする操作群を別のクラス ControlInfo に切り出して
class Control : public ControlInfo {
private:
std::list<Device*> devices_;
};
class Device {
private:
ControlInfo& info_;
};
とかするかな。
#適当に書いてるだけなので、あんまり参考にしないように。
この回答への補足
回答ありがとうございます。
コメントが遅くなってすみません。
現在、koko_u様の意見を参考にして、結合を弱くするためにインターフェイスとしてのクラスを別に定義して、結合を弱くしました。
親の情報が欲しいというのはやはり設計段階で時折、回避できない用件として出てくることですので、今後意見を参考にし、設計を行うように心がけます。
No.3
- 回答日時:
誘導可能なコンポジッションというだけだと思います。
どうしても気になるのなら、前の回答者様のおっしゃるとおり、Controlの中でDeviceが必要とするもののインターフェースを定義してdelegateするか、あるいは、FactoryMethodを用意して参照の設定を隠蔽しておけば、特に問題になることはないと思われます。この場合には、関係が固定的で、一般化の必要性もあまり感じとれませんから、それほどのこともなさそうに思えますが...。No.1
- 回答日時:
このような状態を循環参照というかちょっと微妙なきがしますが・・・
要はこんな感じなのですよね?
class Control
{
std::list <Device *> m_device;
...
};
class Device
{
Control &m_control;
...
};
とくに問題ないと思うのですが・・・
インスタンスの作成に関して危惧されているのでしょうか?
回等ありがとうございます。
まさにその状況です。
参照が循環する情況に不安を覚えています。
なるべくこのような状況は避けてきたので、初めて回避できない状況におかれて、実装が進んだ後に、この状況で私の対処できない問題が発生してしまいますと、対応に時間をとられてしまいますから。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル開いたらウィンドウがでました 2 2023/03/28 16:24
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- Microsoft ASP C#からvbsを実行したい 5 2022/11/24 17:31
- その他(悩み相談・人生相談) 現在海外で大学に通っております。 毎日ように課題の提出で終われており、おかしくなりそうです。毎日迫ら 1 2023/04/10 23:09
- 電気工事士 AC100v供給ライン L,N,PEの電圧状況について 2 2022/09/17 10:38
- 環境・エネルギー資源 環境復元のために企業が行うこととは 3 2022/06/11 13:02
- その他(ブラウザ) このページは動作していません HTTP ERROR 401 2 2022/11/28 12:11
- リフォーム・リノベーション ユニットバスに市販の循環金具は付くのでしょうか・・・? 1 2023/04/19 07:15
- YouTube 東海オンエアの切り抜き、収益化されていない段階であれば無許可で動画投稿をしても問題ないか?について 1 2022/09/24 12:42
- Excel(エクセル) エクセル 循環参照 エラー表示のみ 1 2022/11/02 10:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
ダイアログ表示時にチェックボ...
-
MFCアプリのコマンドラインでパ...
-
(UWSC) 「#32770」の意味わかり...
-
既定のコンストラクタがない?
-
c#でファクトリークラスの使い方
-
Visual C++ 6.0 でクラス表示が...
-
循環参照の問題に関して。
-
C++で継承元のクラスの代入演算...
-
関数重複の問題
-
Serialize で困ってます!!
-
OnInitDialog()の関数の組み込み方
-
オーバーライド関数の呼び出し...
-
クラスのアドレスを引数として...
-
[MFC] CWnd::MessageBoxの警告...
-
【C++】相互参照
-
C++のMFCを使っています。
-
C++ protectedにアクセス不可
-
CViewクラスの切り替え
-
DebugクラスとTraceクラスの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
エディットコントロールのイベ...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
ダイアログクラスのコントロー...
-
C++ protectedにアクセス不可
-
DebugクラスとTraceクラスの違い
-
DataGridViewのセルに斜線を引...
-
【ASP.NET】 独自で作成したク...
-
このコンパイルエラーの意味に...
-
継承を重ねた場合のコストはど...
-
エディットコントロールでEnter...
-
ボタンのオーナードローについて
-
C#で通常のbuttonコントロール...
-
MFCのCListCtrlでスクロールを検出
-
【C++】相互参照
-
関数の呼び出し元の検索
おすすめ情報