最近苦労していました。
問題はコンストラクターの呼び出しです。
次のようなコードを書きました。
#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/g++ 4 では拒否されます。
最後に、私は解決策を見つけました。
デフォルトのコンストラクターを単純に変更する
Foo() {Foo(5);}
の中へ
Foo() { new (this) Foo(5); }
問題を解決します。
括弧内の「これ」は何をしますか?