如果类成员属性是值类型或者引用类型则需要改对象有无参数构造方法,否则类无法实例化, 这是因为这类成员属性在构造函数调用之前就需要进行初始化。

下面代码无法通过编译

class Foo
{
public:
	Foo(int n) : n {n}
	{
	};
	~Foo() { };

private:
	int n;
};

class Bar
{
public:
	Bar(int n)
	{
		this->foo = Foo(n);
	};
	~Bar();
private:
	Foo & foo;
};