使用此指针的初始化列表

Initialisation list with this pointer

本文关键字:初始化 列表 指针      更新时间:2023-10-16

在这里感到困惑。即使在初始化列表中传递this,程序也正在成功编译和运行。我的印象是,在这里传递this编译器应该给出一些错误,因为对象尚未在此处创建。

两个cout的输出是相同的;即它们拥有相同的地址。

我知道这不是正确的编程方法,但这里到底发生了什么?

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

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

即使对象尚未完全初始化,其地址也是已知的,可以分配给指针。

虽然这个成语一点也不常见,但我可以看到它被用于例如链表的初始化。