我可以在构造函数完成之前安全地在类外部使用这个指针吗(我不是说从构造函数调用虚函数)?
我的意思是这样的:
#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;
}
当我尝试在 MSVC-11.0 中编译此代码时,我收到以下警告
警告 C4355:“this”:在基本成员初始化列表中使用
那么这样的代码呢?
#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;
}
我找不到任何来自标准的报价。