著作一覧 |
コンストラクタでインスタンス変数の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呼び出しとか例外とかコンストラクタは罠がいっぱい(懐かしいな…)