| 著作一覧 |
コンストラクタでインスタンス変数のNULL化とかしなきゃならないことをすっかり忘れきっていた(きっていたは嘘だな。思い出して直せたわけだし)。
蛭子能収コレクション (動物編)(蛭子 能収)
IO.binmode do
bindata = IO.read('file')
end
if bindata == "\x0d\x0a" # NameError
はまる人はどうやってもはまる。
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)
ジェズイットを見習え |
必ずしも「バイナリで扱いたい」というばかりではないのでは? 例えば「Windowsでも改行コードを"\n"のみにしたい」とか。
うーんどうなんでしょうか?<br>一気に全部読み込んで正規表現をかけるとかかな。(と書いてからmって\r\nをどう扱うかわからないことに気づいたということは、そういう\nで全部読みを僕も利用しているってことですね)
コンストラクタで例外を投げたら、newしている側はインスタンスを受け取れないから、そもそもdeleteできないような気がするんですが、C++は、すっかり忘れているので、変なことを言っているかもしれません。
その通りです>インスタンスを受け取れない。<br>で、スタックに直接作れば平気だろうと思ったらやっぱり呼ばれない(一貫性があるのでそれはC++の仕様としては良いけど、上のクラス定義は望ましくないですね)ので困惑したと。
virtual呼び出しとか例外とかコンストラクタは罠がいっぱい(懐かしいな…)