這幾天一直在掙扎。使用placement new來調用構造函數
問題是構造函數調用。
我寫像一塊代碼:
#include <iostream>
using namespace std;
class Foo
{
private: int _n;
public:
Foo() { Foo(5);}
Foo(int n) {_n=n; cout << n << endl; }
};
int main()
{
Foo* foo = new Foo();
return 0;
}
當我構造的Foo對象外使用默認構造:
Foo* f = new Foo();
我想可變_n爲5,然而,事實並非如此。
在Java中沒關係,但不在C++中。
另外,在Visual C++ 6 SP 6,
Foo() {this->Foo(5);}
作品。
然而,該表達通過GCC拒絕/克++ 4.
最後,我發現瞭解決方案。
只需更改默認構造成
Foo() {Foo(5);}
到
Foo() { new (this) Foo(5); }
解決了這個問題。
圓括號中的「this」是做什麼用的?
Googl ... err覆蓋了[C++ FAQ](http://www.parashift.com/c++-faq/index.html):[「一個類的一個構造函數可以調用另一個構造函數同樣的類初始化這個對象?「](http://www.parashift.com/c++-faq/init-methods.html) – 2012-07-18 18:45:45
」在Java中沒關係,但不在C++中。「根據你對Java的瞭解,甚至不用費力去理解C++。它不但沒有幫助,而且實際上是有害的。 – 2012-07-18 18:46:55
如果我沒有弄錯,解決這個問題的一個方法是不聲明'Foo()',而是將'Foo(int n)'聲明改爲'Foo(int n = 5)'。這樣,該構造函數可以用作默認值。這是一段時間,因爲我做了任何C + +編程,所以我可能是錯誤的那 – 2012-07-18 18:47:04