0
我可以在其構造函數完成之前安全地在類之外使用此指針嗎(我不是指構造函數的虛擬函數調用)?這個指針和構造函數
我的意思是這樣的:
#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: '這個':在使用基礎成員初始化列表
那麼這樣的代碼呢?
#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;
}
我找不到任何標準報價。
關於警告:如果什麼'Bar'是使用'Foo' *的成員*前成員的構造函數被調用?這可能導致未定義的行爲。 – 2013-02-14 04:19:20
我不知道如何正確標記(常見問題解答沒有幫助),但這看起來像是一個邊界重複。 (http://stackoverflow.com/questions/2516960/c-using-this-pointer-in-constructors) – Pseudonym 2013-02-14 04:21:22