这几天一直在苦苦挣扎。
问题是构造函数调用。
我写了一段代码,例如:
#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); }
解决问题。
括号中的“this”是做什么的?