设置一个等于C ++中相同类的构造函数的对象有效吗?

时间:2018-08-22 01:31:33

标签: c++

代码如下:

    class A{
public:
    A();
};
    class B{
public:
    B()
    {
        a=A();
    }
private:
    A a;
};

它可以编译,但是我不确定它是否正确以及它的用途。我相信代码会将'a'设置为等于默认构造函数中的值,但这在创建对象时'a'也已经相等。

1 个答案:

答案 0 :(得分:2)

有效吗?完全可以无意义?大概。您说对了,那里有一个额外的物体。我们可以通过让A默认构造函数显示某些内容来验证这一点。

class A{
public:
  A() { printf("Made an A!\n"); }
};

这将打印“ Made a!”。两次,确认您的假设。

如果我不得不猜测,我会说这段代码是由来自Java的人编写的,其中实例变量被初始化为null,而不是自动调用默认构造函数。像这样的代码不是惯用的C ++,如果我在代码审查中看到它,我应该认为它会引起人们的注意。可以使用B() : a() {}显式构造对象,也可以按照您的建议完全不提及它,以使其成为默认构造。