C++ 这个指针和构造函数

C++ 这个指针和构造函数,c++,C++,在它的构造函数完成之前,我能安全地在类外使用这个指针吗(我不是说从构造函数调用虚拟函数) 我的意思是这样的: #include <iostream> class Bar; class Foo { public: Foo(Bar* bar); }; class Bar { public: Bar() : instance(this) {} void foo() { std::cout << "Bar::foo() \n"; }

在它的构造函数完成之前,我能安全地在类外使用这个指针吗(我不是说从构造函数调用虚拟函数)

我的意思是这样的:

#include <iostream>

class Bar;

class Foo
{
public:
   Foo(Bar* bar);
};

class Bar
{
public:
   Bar() : instance(this) {}
   void foo()
   {
      std::cout << "Bar::foo() \n";
   }

private:
   Foo instance;
};

Foo::Foo(Bar* bar)
{
   bar->foo(); // UB or not
}

int main()
{
   Bar instance;
}
#包括
分类栏;
福班
{
公众:
Foo(Bar*Bar);
};
分类栏
{
公众:
Bar():实例(this){}
void foo()
{
std::cout foo();//是否为UB
}
int main()
{
酒吧实例;
}
当我试图在MSVC-11.0中编译这段代码时,我得到了以下警告

警告C4355:“此”:用于基本成员初始值设定项列表

那么这些代码呢

#include <iostream>

class Foo;

void bar(Foo* instance);

class Foo
{
public:
   Foo()
   {
      bar(this);
   }

   void foo()
   {
      std::cout << "Foo::foo() \n";
   }
};

void bar(Foo* instance)
{
   instance->foo(); // UB or not
}

int main()
{
   Foo instance;
}
#包括
Foo类;
空栏(Foo*实例);
福班
{
公众:
Foo()
{
酒吧(这个);
}
void foo()
{
std::cout foo();//是否为UB
}
int main()
{
富实例;
}

我找不到标准中的任何引用。

这在第二个示例中的
Foo
ctor或
bar
函数时有效不要调用smth,它引用仍然未初始化的
bar
/
Foo
成员

class Bar
{
public:
    Bar() : instance(this),zzz(123) {}
    void foo()
    {
        std::cout << "Bar::foo(): garbage in zzz=" << zzz << "\n";
    }

private:
    Foo instance;
    int zzz;
};
类栏
{
公众:
Bar():实例(this),zzz(123){}
void foo()
{

std::cout关于警告:如果
Bar
的一个成员在调用该成员的构造函数之前被
Foo
使用,该怎么办?这可能会导致未定义的行为。我不确定如何正确地标记它(常见问题解答没有帮助),但这似乎是一个边界重复。()