トップ «前の日記(2006-06-13) 最新 次の日記(2006-06-15)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2006-06-14

_ C++やばい

コンストラクタでインスタンス変数のNULL化とかしなきゃならないことをすっかり忘れきっていた(きっていたは嘘だな。思い出して直せたわけだし)。

_ なんとなくビンビン

蛭子能収コレクション (動物編)(蛭子 能収) 蛭子能収コレクション (映画編)(蛭子 能収)
やっぱりブロックでしょう。
IO.binmode do
  bindata = IO.read('file')
end
if bindata == "\x0d\x0a" # NameError
はまる人はどうやってもはまる。

_ C++

コンストラクタで例外を上げるのはもしかしてすごくまずいのか?
class Test
{
    FILE* opened;
public:
    Test(char* pf)
    {
        opened = fopen(pf, "w");
        ...
        if (bad_condition)
        {
            throw "bad condition";
        }
    }
    virtual ~Test() // bad_conditionが真だと呼ばれない
    {
        fclose(opened);
    }
    ...
};
#Javaに慣れきったせいもあってC++でも例外を投げたくなったわけだが。

_ もちろん無理なわけだが

バイナリーで扱いたいということを心理学的に考察すれば次のようにプログラマは振舞うのではないか?
hex_data = IO.read('file', 0x08, 0x10)
# or
octet_data = IO.read('file', 010, 020)
#
text = IO.read('file', 8, 16)
本日のツッコミ(全5件) [ツッコミを入れる]
_ ただただし (2006-06-14 12:56)

必ずしも「バイナリで扱いたい」というばかりではないのでは? 例えば「Windowsでも改行コードを"\n"のみにしたい」とか。

_ arton (2006-06-14 13:34)

うーんどうなんでしょうか?<br>一気に全部読み込んで正規表現をかけるとかかな。(と書いてからmって\r\nをどう扱うかわからないことに気づいたということは、そういう\nで全部読みを僕も利用しているってことですね)

_ るいも (2006-06-14 14:40)

コンストラクタで例外を投げたら、newしている側はインスタンスを受け取れないから、そもそもdeleteできないような気がするんですが、C++は、すっかり忘れているので、変なことを言っているかもしれません。

_ arton (2006-06-14 15:01)

その通りです>インスタンスを受け取れない。<br>で、スタックに直接作れば平気だろうと思ったらやっぱり呼ばれない(一貫性があるのでそれはC++の仕様としては良いけど、上のクラス定義は望ましくないですね)ので困惑したと。

_ mumurik (2006-06-15 07:34)

virtual呼び出しとか例外とかコンストラクタは罠がいっぱい(懐かしいな…)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え