Archive for 5月, 2008

前回のエントリで書いたコンストラクタの問題。
それの解答ってことで。間違ってるって場合はコメントくだちい。

まず、何が問題であったか。
前回のコードでは bad_alloc をまったく考えていないですよね。
で、コンストラクタ内で例外が発生し、コンストラクタが正常終了しないと、デストラクタが呼ばれません。これ重要。
なぜならオブジェクトとして生成されないんだから。

初期化リストやコンストラクタ内でメモリ確保を行って、 bad_alloc が発生するとどうなるでしょう。例えば one_ では確保成功、two_ で確保失敗のようなケースです。
one_ で確保したメモリはデストラクタが呼ばれないので解放されんのです。リーク。

解決策としては下記のようなコードを書きます。

C++:
  1. class Hoge
  2. {
  3. public:
  4.     Hoge() : one_(0), two_(0)
  5.     {
  6.         try {
  7.             one_ = new A;
  8.             two_ = new B;
  9.         }
  10.         catch (...) {
  11.             delete one_;
  12.             delete two_;
  13.         }
  14.     }
  15.  
  16.     ~Hoge() {
  17.         delete one_;
  18.         delete two_;
  19.     }
  20.  
  21. private:
  22.     A* one_;
  23.     B* two_;
  24. };

先日のコードだと長いので要素を減らしましたが、やってることといえば 例外をキャッチして後始末をする ってだけです。
メモリ解放に失敗してもコンストラクタは成功し、デストラクタも呼ばれます。
初期化リストではヌルポでも入れておきましょう。

# Seasons 氏に言われたので 補足しときますね。
# 上記例では int でメモリ確保してますけど、これは例ですので、 class とかに置き換えて考えてくだちい。

# アキラ 氏につっこみ貰いましたので、ソースを修正しました (2008/06/10)
# ついでに、クラスが持つメンバ変数を class A, class B のようなものにしてみました (2008/06/10)

会社でコードを眺めているとこういうのがあったりする。

C++:
  1. class Hoge
  2. {
  3. public:
  4.     Hoge() :
  5.     one_(new int),
  6.     two_(new int),
  7.     three_(new int),
  8.     riderKick_(new int)
  9.     {}
  10.  
  11.     ~Hoge() {
  12.         delete one_;
  13.         delete two_;
  14.         delete three_;
  15.         delete riderKick_;
  16.     }
  17.  
  18. private:
  19.     int* one_;
  20.     int* two_;
  21.     int* three_;
  22.     int* riderKick_;
  23. };

デンジャラス。
何がデンジャラスかがわからない人はデンジャラスだぜ。

自分は hotmail をよく使っています。
ですが、無料会員ではメールに広告が付くんだよね。
gmail は広告付かないし、ストレージ大きいし、いいこと尽くし。

MS は google に対してライバル意識があるぽいんだけど、hotmail は便利にならんなぁ。
少なくても広告は消して欲しいなー、うざいし。
yahoo を買収して、yahoo mail + hotmail = yatmail みたいのでも作るんかな。
何回交渉持ちかけても、買収できるか怪しいけどね。

# こんな記事見つけた マイクロソフトはもう買収に興味を抱いていない=米ヤフーCEO

先日の例大祭おつでした。で、さっそく地霊殿。
このエントリにはストーリー的なネタばれはないよ。システム的なところでの感想。

今回はかすりがポイント!
かすり100回につき、アイテム最大得点のボーナスが1%増える。
1000回かすれば、10%分のアイテムスコアが増えるっていうこった。やばい。

でも本当にやばいのは霊夢(紫) だった(ズバーン
なんとボム中無敵かつ、かすり判定が残る。
弾が多いところで積極的にボム&かすり。お試しください。

# ミスするとアイテム最大得点がリセットされるのが辛い。バグなのか仕様なのか・・・

祭り参加者、飲み会参加者のみなさん、お疲れ様でした。
自分は某大学面子(OB)の飲み会、例大祭、東方部オフ飲みに参加してきました。

某大学の飲み会。適当な幹事ですいませんでした。
ちょいといっぱいいっぱいになってました。(タスク量的に)
また開催するので、ヨロシクねー。

例大祭は初めて行ったんですけど、酷く込んでいてびっくり。
そして地霊殿はすごく俺好みのSTGな気がしてきた。かすればかするほど点数が稼げる。
ちょっとヤル気になりました。かすりゲーはひさしぶりなのでw

東方部オフ。風呂入ったりするとは思わなかったよw
初めてなので自重してたけど、酒入ったら少しづつ素が出てきていたような気がする・・・
2次会、3次会?と参加してみたかったけど、家に友人を放置しているので1次会後に帰宅。
あんまり話できなかったけど、次回またよろしくです!

そんな感じの激しい週末でした。

高いプリンタは使っちゃだめよと言われた。
論文をカラー印刷してごめんなさい。200ページくらいカラーでやりました。

後悔はしていない。

昨日、php を弄ったわけですが、cat って何だろうってよくよく考えるとカテゴリーみたいですね。
cat があった場合をページにしちゃってるのはまずいですね。
結局、WordPress更新時の失敗のせいでカテゴリーを再登録したときに順番が狂ったから古い記事が見れないという状態のようです。
ナンテコッタ

とりあえず昨日弄った部分は元に戻しましたorz

1つ前のエントリで書いたとおり、WordPress をちょろっと改造しました。
つか、cat があるか p があるかを見てるだけです。

index.php で

PHP:
  1. $p = 0;
  2. if (isset($_GET['p'])) {
  3.     $p = $_GET['p'];
  4. }
  5. else if (isset($GET['cat'])) {
  6.     $p = $_GET['cat'];
  7. }

上記を追加。リクエストしすぎはよくないですが。

そういえば、WordPress を更新したら、各記事のアドレスが微妙に変わっていますね。

変更前:http://dodeka.net/~j2/wp/?cat=1
変更後:http://dodeka.net/~j2/wp/?p=1

昔の記事が検索に引っかかったときに、古いアドレスだったりします。
すると、記事に直接飛ばないので面倒ですね。
バージョンアップしても、変数変更とかしなくても良いのではと思ったり思わなかったり。
php 弄って改造してやろうか。

すいません、前回のコードは2003でも動きました。僕が気づかなかっただけですね。

C++:
  1. class Hoge {
  2.     static const int value = 100;
  3. };

のようなことができないのは vc6 のようです。
enum ハックが必要なのは vc6 だけよ!
ゆうぎーー!HA☆NA☆SE!!