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
使用,该怎么办?这可能会导致未定义的行为。我不确定如何正确地标记它(常见问题解答没有帮助),但这似乎是一个边界重复。()