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