代码如下:
class A{
public:
A();
};
class B{
public:
B()
{
a=A();
}
private:
A a;
};
它可以编译,但是我不确定它是否正确以及它的用途。我相信代码会将'a'设置为等于默认构造函数中的值,但这在创建对象时'a'也已经相等。
答案 0 :(得分:2)
有效吗?完全可以无意义?大概。您说对了,那里有一个额外的物体。我们可以通过让A
默认构造函数显示某些内容来验证这一点。
class A{
public:
A() { printf("Made an A!\n"); }
};
这将打印“ Made a!”。两次,确认您的假设。
如果我不得不猜测,我会说这段代码是由来自Java的人编写的,其中实例变量被初始化为null
,而不是自动调用默认构造函数。像这样的代码不是惯用的C ++,如果我在代码审查中看到它,我应该认为它会引起人们的注意。可以使用B() : a() {}
显式构造对象,也可以按照您的建议完全不提及它,以使其成为默认构造。