我可以在构造函数完成之前在类外安全地使用这个指针(我不是指构造函数的虚函数调用)吗?
我的意思是这样的:
#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;
}
我无法从标准中找到任何引用。
答案 0 :(得分:1)
在第二个示例中Foo
ctor或bar
函数不调用带有{strong>仍然未初始化成员 {{ 1}} / Bar
。我会稍微改编你的第一个例子来证明:
Foo