トップページ > プログラム > 2016年01月23日 > M1o1eQTV

書き込み順位&時間帯一覧

11 位/190 ID中時間01234567891011121314151617181920212223Total
書き込み数2100000000000010000000004



使用した名前一覧書き込んだスレッド一覧
935
964
C++相談室 part121 [無断転載禁止]©2ch.net

書き込みレス一覧

C++相談室 part121 [無断転載禁止]©2ch.net
964 :935[sage]:2016/01/23(土) 00:54:21.22 ID:M1o1eQTV
>>956を見てハッとしました。たぶん、いや確実に今書いてるコードは糞なんだと思います。
この糞コードを書いたときの流れはこんな感じでした。

クラスもインスタンスもたくさんあってメモリリーク怖いから、とりあえずインスタンス化には
スマートポインタshared_ptr使っとこう。
 ↓
そういえばクラス関係は 国→県→市→番地 みたいな階層構造になってるんだった。
(左側クラスは右側クラスを複数含む)
 ↓
じゃあメンバでvector<shared_ptr<class>を持たせよう。
 ↓
逆方向 国←県←市←番地 にものアクセス欲しいな。
 ↓
shared_ptrメンバじゃ循環参照になってしまうから、weak_ptrメンバにしとくか。
 ↓
weak_ptrいちいちlock()すんのめんどくせー。
 ↓
>>935に至る。

まぁ事実まともな設計とか全くしたことない素人なんですが、改めて書き下してみると酷いな・・・
C++相談室 part121 [無断転載禁止]©2ch.net
965 :935[sage]:2016/01/23(土) 00:59:37.64 ID:M1o1eQTV
今一度足りない頭でクラスの所有関係と各クラスが持つべきメンバについて
考えてみたのですが、こんな感じで合ってるでしょうか?

親クラス(管理側)をP、子クラス(非管理側)をCとして、
@PはCをメンバとして所有する。複数所有したいならvector<C>とする。
ACはPへアクセスする必要があるなら、Pへの参照メンバを持たせる。
BPのvector<C>メンバの並び順をCの内部状態によって変えたいなら、vectorではなくlistにする。

Bが正しいか気になります。
C++相談室 part121 [無断転載禁止]©2ch.net
966 :935[sage]:2016/01/23(土) 01:03:44.65 ID:M1o1eQTV
ここまで考えて思ったのですが、クラスメンバにスマートポインタがあるのは所有関係を
きちんと考えていない、つまり設計が不十分な可能性を疑うべき、ということでしょうか。
>>955さんの
>循環参照は機能分割が不十分な事による設計ミスのが多いよ
や、>>956さんの
>というかshared_ptr使ったコードは高確率で糞コード。
はそういう意味だったんですかね。

そうするとスマートポインタが主として登場すべき場面とは、関数内でテンポラリ的にインスタンスを作り
それを他の関数に渡す等のごにょごにょした作業をしたいときなんでしょうかね?

なんかレスが多くなってすみませんが、指導していただけると助かります。
C++相談室 part121 [無断転載禁止]©2ch.net
985 :964[sage]:2016/01/23(土) 14:42:34.05 ID:M1o1eQTV
>>967>>968>>970
ありがとうございます。さっそく糞コードを修正します。
いやはやとんでもない勘違いをしていた・・・


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。