2

ここで混乱しました。初期化リストを渡してもthis、プログラムはコンパイルされ、正常に実行されます。thisオブジェクトがここで作成されていないため、ここを渡すと、コンパイラは何らかのエラーを出すはずだという印象を受けました。

両方の の出力はcout同じです。つまり、同じアドレスを保持しています。

これが正しいプログラミング方法論ではないことはわかっていますが、ここで何が起こっているのでしょうか?

    class foo
    {
            public:
            foo():myself( this ) {}
            foo * myself;
    };


    int main()
    {
            foo f;
            cout<<f.myself<<endl;   
            cout<<&f<<endl;
            return 0;
    }
4

1 に答える 1

2

オブジェクトはまだ完全に初期化されていませんが、そのアドレスは既知であり、ポインターに割り当てることができます。

このイディオムはまったく一般的ではありませんが、たとえば、リンクされたリストの初期化に使用されているのを見ることができました。

于 2012-04-25T22:38:30.483 に答える