トップ «前の日記(2007-03-14) 最新 次の日記(2007-03-16)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2007-03-15

_ 仮想関数

そういえば、以前、わかりにくいバグで悩んだなぁ、と思い出した。

こんなの。

#include <stdio.h>
#include <memory.h>
struct A {
    int a;
    int b;
    A(int ia, int ib) : a(ia), b(ib) { }
    int sum() { return a + b; }
};
struct B {
    int a;
    int b;
    B(int ia, int ib) : a(ia), b(ib) { }
    virtual int sum() { return a + b; }
};
int main(int argc, char* argv[])
{
    A a(1, 2);
    printf("%d\n", a.sum());
    B b(1, 2);
    printf("%d\n", b.sum());
    memset(&a, 0, sizeof(A));
    printf("%d\n", a.sum());
    memset(&b, 0, sizeof(B));
    printf("%d\n", b.sum());
    A* xa = &a;
    printf("%d\n", xa->sum());
    fflush(stdout);
    B* xb = &b;
    printf("%d\n", xb->sum());
    return 0;
}

もちろん、fflushの位置でわかるように、fflushより前は問題なく、後に問題がある。少なくてもVC++6では。

でも、VC++2かVC++4かどっちかのころは、全部問題なかったのだった。どっかのタイミングで、vtblを明示的に(暗黙のうちではなく)メンバとして扱うようになった(のがクラッシュする理由なわけだ)のだが、ドットを使った呼び出しでは問題ないわけで(これはVC++6の最適化によるのか、それとも仕様か、さてどっちでしょう?)、そのあたりで混乱したのであった。

_ Macを伝道するogijunの文体

アメーリカのogijunが書いた文章をヒロ山形が翻訳したみたいだな。

全然関係ないが、ps -efとやるとエラーになるのはいやだな。

ちなみに、もっともJavaの実装が遅れていて、しかも変てこで(JNIを利用してネイティブワールドからAWTを使う場合、わざわざワーカスレッドを作ってそこからAWTを呼び出す必要がある)、しかもSunの通常のサイトからダウンロードできなくて……というような人によっては致命的とも言える欠点があることは内緒だ。

が、生まれてきたからには、一度は、SafariでWWWの世界を見てみるべきだ。本当に、それまで自分が見ていた世界がなんかの間違いだったとびっくりするから。

本日のツッコミ(全8件) [ツッコミを入れる]
_ かくたに (2007-03-15 01:59)

> アメーリカのogijunが書いた文章をヒロ山形が翻訳したみたいだな。<br><br>私もそう思いました!

_ metanest (2007-03-15 12:43)

GNU な ls ないんですかね。FreeBSD だったら ports/misc/gnuls を入れれば一発ですが

_ arton (2007-03-15 13:06)

ogijunが書いてるのは、最初から入ってる(=すぐに使える)からイイって話なんで(そうじゃなきゃ、WindowsのExposeモドキ批判が出てくることは無い)、後から入れるんじゃ意味ないと思います。

_ arton (2007-03-15 13:07)

あ、でも全然関係ないって書いてるから、それは意味あるご教示なのか。どうも。

_ metanest (2007-03-15 13:27)

あ、いえ sysv なオプションを受け付けない ps の話のつもりで大ボケです m(__)m 忘れてください (^^;

_ arton (2007-03-15 15:50)

単にpとlを書き間違えただけでしょ? 確かにsysv好きならそれもありだな、と納得したけど。

_ ogijun (2007-03-15 16:16)

もうちょっと自然な翻訳口調にしたかったんですが、時間がなくて詰めが甘いのであります。

_ arton (2007-03-15 22:34)

あのクォリティの高さで? >詰めが甘い


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|

ジェズイットを見習え