どうして!?
■ このスレッドは過去ログ倉庫に格納されています
0001教えて君
NGNGclass Hoge
{
public:
void func()
{
printf("ゴルァ\n");
}
};
int main(void)
{
Hoge* h = 0;
h->func();
return 0;
}
--- 実行結果 ---
ゴルア
0002教えて君
NGNG0003デフォルトの名無しさん
NGNGつーか、コンパイラ名ぐらい書け。
0004デフォルトの名無しさんだもん
NGNG0005デフォルトの名無しさん
NGNG上手くいっているように見えるだけだろ?
0006Java使い
NGNGNullPointerExceptionも出んのか。
0007デフォルトの名無しさん
NGNGでもnon-virtualだとクラッシュしない。
これって仕様なの!?
>>3
スマソ。VC++ 6.0です。
0008教えて君
NGNG0009デフォルトの名無しさん
NGNGできるから、thisポインタに0がpushされてコールされるだけ。
けっきょくだれもthisポインタ触らないから動く。
0010>6
NGNGVB.NETでやってみたら、NullReferenceException発生。
よって、C#はC++とお友達。VB.NETはJavaとお友達。
0011デフォルトの名無しさん
NGNGHoge::func()にアーリーバインディングされる。
処理は、ヌルのthisポインタを抱えながらHoge::func()関数内に移行する。
関数内でもデータメンバにアクセスしているわけでもないので、
なんのアサーションも出ないで関数からご帰還。
メモリ上のクラスオブジェクトを参照しないで、
メンバ関数を含むコードブロックだけを参照しているから
エラーがでないのかな?
VC6.0++以外のコンパイラではどうなんでしょ?
0012教えて君
NGNG何となくですが理解できました。ありがとうございます。
ただ、1つだけよくわからないのは、newしてないのに
Hoge::funcの実体があることです。
これって、staticメソッドみたいに実体は1つで
クラスで共有されてるということなのでしょうか。
今までずっと、インスタンスごとに1つづつ作られるものだと思ってましたが...。
0013デフォルトの名無しさん
NGNG/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
Λ_Λ | 君さぁ こんなスレッド立てるから |
( ´∀`)< 厨房って言われちゃうんだよ |
( ΛΛ つ >―――――――――――――――――――‐<
( ゚Д゚) < おまえのことを必要としてる奴なんて |
/つつ | いないんだからさっさと回線切って首吊れ |
\____________________/
0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNGhttp://objc.sourceforge.org/とかが生成する
コードを見てみるとわかると思うけど、、、
typedef struct
{
} Hoge;
void Hoge_func( Hoge *this )
{
printf( "ゴルァ\n" );
}
int main( void )
{
Hoge *h = 0;
Hoge_func( h );
}
こんなふうになってると思えばいいかも。
001615
NGNG0017デフォルトの名無しさん
NGNG>ただ、1つだけよくわからないのは、newしてないのに
>Hoge::funcの実体があることです。
理解してねーじゃねーか
9,11はしっかり書いてくれた、ここら辺理解できたら
こんな板でも、立った意味があったのに・・・
0018デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています