最近我遇到了一些困难。
问题出在构造函数的调用上。
我写了一个代码片段,像这样:
#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”是什么作用?
Foo()
函数,而是将Foo(int n)
函数的声明改为Foo(int n=5)
。这样,该构造函数就可以被用作默认值。由于我已经有一段时间没有做任何C++编程了,所以我的理解可能不正确。 - Dan FFoo() { Foo(5);}
构造了一个类型为Foo的对象,并将参数设置为5,不做任何工作,然后立即销毁它。 - anatolyg