現在部品となるクラスはそこそこ出来たところ。感覚的に全部の半分程度。
(実際に必要となるのは予想や感覚よりずっと多いのだろうけど)
しかしながら、それらのインスタンスやらクラスやらをどうやって組み合わせるか迷っております。
くっつけるクラスを作るべきであることはほぼ間違いないはず。
ではどうやってくっつけるか。派生とオーバーライド使って・・・と考えてもいますが、
一度も使ったことがない技術ゆえ、なかなか一歩踏み出せません。
そんなこんなで今あるクラスの改良やら追加やらに逃げております。
このままではひじょうに望ましくない。魅力的な機能だけど・・・
本で読んだ限りでは、基底クラス→派生クラスと言う順序で作っているので、
「何かしら後で追加するよ!」と大まかに枠組みを決め、だんだんと細部をコードする。
という印象を受けました。私は先に細かい部品作っちゃったので読み替えねば;
抽象クラスについては、凄いのが分かっただけで使いこなせないだろうな・・・
実体を作らないとは。本の用例は 三角や丸を束ねる基底クラス でした。
継承や抽象クラスのどちらもイメージがよくつかめないので、インスタンスをどうしようか、
そもそもどうなるんだと迷うわけですよ。いろいろ試すしかないのでしょう。
マネージャはみんな被雇用者だけど、被雇用者の全員がマネージャとはいえない。
そんなときに派生クラスらしい。何個も派生が重なったらprivate意味あるんだろうか等
疑問は山積みである。
現在のプログラムは本に書いてある設計と比べたりすると、割とめちゃくちゃなようです;
デバッグを通ってしまう不具合になかなか気づかないのも、あまり読み返さないからでありまして;
FPSが(55,49,40,32,19,11)なんて変化していくので何事かと思ったら、
ループ内でインスタンス生成が原因でした。それを解決しても60にならない。
スペック不足が原因と思われる。処理落ち回避に、条件付で描写処理を回避する処理を
FPS関係に組み込んでいきたい。
それとnewとdelete,スマートポインタ。newとdeleteはメモリリークが怖い。
Win(2000/XP)ではOSが解決してくれると記述したサイト発見。しかしながら、
そのサイト以外での記述がなかなか見当たらないので保留中。
スマートポインタは「凄い!楽だ!素晴らしい!」とあるサイトを読んでいて思ったのですが、
最後に「スマートポインタは破壊的な~なので極力使用は避けるべき」といった意味の引用が・・・
天国から地獄です。よく分からない理由で使用すべきでない、とされているものは個人的に禁忌です。
スマートポインタの使用も難しくなってきました。
どちらも使わないのはそろそろ限界。無理やりやれば、私にとってコードが更に汚くなるのが
目に見えてます。難しい。もうなんとかして「Advanced Windows」を入手・読むしかないのか・・・
次回はプログラム以外をメモしようかと・・・・・・あればの話ですが。
ごにょごにょ
Re: ごにょごにょ
new/deleteを使うC++、malloc系とfreeを使うC
どちらも自動的に解放はしてくれないので、自己責任でやる必要があります。
※VC++.NETの場合はgcnewなるキーワードがあってこちらは自動的に解放されます。
C#やJavaなんかは自動的に解放してくれますが(そもそも解放するメソッドがないか、推奨していない)。
Windows(95/98/NT/2k/XP…)はもとはC言語で作成しているから、どうしてもそうなっちゃうんですよね。
個人で購入する場合はかなりお値段はりますけどね~
どちらも自動的に解放はしてくれないので、自己責任でやる必要があります。
※VC++.NETの場合はgcnewなるキーワードがあってこちらは自動的に解放されます。
C#やJavaなんかは自動的に解放してくれますが(そもそも解放するメソッドがないか、推奨していない)。
Windows(95/98/NT/2k/XP…)はもとはC言語で作成しているから、どうしてもそうなっちゃうんですよね。
「Advanced Windows」、興味あるなら見ておいた方がいいですよ。zxc さんが書きました:もうなんとかして「Advanced Windows」を入手・読むしかないのか・・・
個人で購入する場合はかなりお値段はりますけどね~
最後に編集したユーザー へにっくす on 2012年9月11日(火) 05:42 [ 編集 2 回目 ]
Re: ごにょごにょ
スマートポインタが破壊的云々の話は所有権に関することでせう。
汎用スマートポインタは参照カウンタが参照先のオブジェクトじゃなくてスマートポインタ自身に紐付くので、その点を理解していないと逆にダングリングポインタ問題が発生して発見しにくいバグを作ります。
auto_ptrとshared_ptrの違いについて調べてみたりすると良いかと思います。
汎用スマートポインタは参照カウンタが参照先のオブジェクトじゃなくてスマートポインタ自身に紐付くので、その点を理解していないと逆にダングリングポインタ問題が発生して発見しにくいバグを作ります。
auto_ptrとshared_ptrの違いについて調べてみたりすると良いかと思います。
RE: ごにょごにょ
new/deleteは自己責任で、より自由にメモリの管理が出来ると言うへにっくす さんが書きました: new/deleteを使うC++、malloc系とfreeを使うC
どちらも自動的に解放はしてくれないので、自己責任でやる必要があります。
上級者向けのものだと思うんです。初心者には厳しいです。
JavaやC#は自動で開放らしいですね。それはそれで上級者の方が困るんでしょうか。
個人的にかなり高いです。しかし手元にあれば安心感がありますね。へにっくす さんが書きました: 「Advanced Windows」、興味あるなら見ておいた方がいいですよ。
個人で購入する場合はかなりお値段はりますけどね~
所有権という知らない語とboost,shared,autoなどたくさん種類があるらしいことがISLe さんが書きました: スマートポインタが破壊的云々の話は所有権に関することでせう。
汎用スマートポインタは参照カウンタが参照先のオブジェクトじゃなくてスマートポインタ自身に紐付くので、その点を理解していないと逆にダングリングポインタ問題が発生して発見しにくいバグを作ります。
auto_ptrとshared_ptrの違いについて調べてみたりすると良いかと思います。
使用を躊躇う理由の一つかもしれません。
これを機に勉強します。
最後に編集したユーザー zxc on 2012年9月11日(火) 21:05 [ 編集 1 回目 ]
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 14年前
Re: ごにょごにょ
「破壊的コピー」のことですね。
たしかauto_ptrからauto_ptrにコピーするときだけ、コピー後にコピーされた側が保持するポインタがNULLに書き換えられることをそう呼ぶということだったと思います。
ですからauto_ptr間でコピーしなければ気にする必要はないと思います。
まあどちらにせよboostのスマートポインタ(shared_ptrだとかscoped_ptrだとか)を使う方が好まれますが。
たしかauto_ptrからauto_ptrにコピーするときだけ、コピー後にコピーされた側が保持するポインタがNULLに書き換えられることをそう呼ぶということだったと思います。
ですからauto_ptr間でコピーしなければ気にする必要はないと思います。
まあどちらにせよboostのスマートポインタ(shared_ptrだとかscoped_ptrだとか)を使う方が好まれますが。
Re: ごにょごにょ
auto_ptrは現在は非推奨でunique_ptrがその代わりですね。
VC++2010ならスマートポインタはboostをインストールしなくても幾らかは標準ライブラリに入ってます。
VC++2010ならスマートポインタはboostをインストールしなくても幾らかは標準ライブラリに入ってます。
Re: ごにょごにょ
自身でコピーしたつもりが無くとも、vectorあたりはコピーして処理するらしいのでMoNoQLoREATOR さんが書きました: 「破壊的コピー」のことですね。
たしかauto_ptrからauto_ptrにコピーするときだけ、コピー後にコピーされた側が保持するポインタがNULLに書き換えられることをそう呼ぶということだったと思います。
ですからauto_ptr間でコピーしなければ気にする必要はないと思います。
使えないらしいです。だとすると後々困る場合が出るかもと思っています。
STLもまだ勉強不足ですので、回避できるかも良く分かりません。まだ保留ですね。
まずはautoとunique、shareなどの差異を覚えていこうと思います。涼雅 さんが書きました: auto_ptrは現在は非推奨でunique_ptrがその代わりですね。
VC++2010ならスマートポインタはboostをインストールしなくても幾らかは標準ライブラリに入ってます。
uniqueはそもそも代入が不可能になったらしいですね。autoよりも
分かりにくいミスが減るわけですか。shareは循環参照禁止。
構文がSTLと似ているようなのでSTLも勉強します。