为什么在C++中的另一个类的成员函数中没有调用构造函数

Why constructor is not being called in member function of another class in C++?

本文关键字:构造函数 函数 调用 C++ 另一个 为什么 成员      更新时间:2023-10-16

我有两个类:AgeAnimal

我认为Age的构造函数应该调用两次:

  • Animal a = Animal(13);上的第一次
  • 第二次在a.getAge();上(因为函数定义中的Age temp(age);

但是。。。main()的输出是Age constructor!而不是Age constructor!Age constructor!,所以这个构造函数似乎只调用过一次(我已经检查过它是在构造Animal对象时调用的。)。为什么

这是我的代码:

class Age {
private:
    int value;
public:
    Age(int a) :value(a) { cout << "Age constructor!"; }
};
class Animal {
private:
    Age age;
public:
    Animal(int a) : age(a) {}
    Age getAge() const { Age temp(age); return temp; }
};
void main() {   
    Animal a = Animal(13);
    a.getAge();
}
Age temp(age);

它是对复制构造函数的调用,而不是默认调用。所以,编写复制构造函数并向其添加跟踪,如果您想查看该副本是否已创建。

getAge()中的Age构造函数调用复制构造函数,该构造函数在本例中是编译器生成的。没有在那里调用采用int的构造函数。

同样值得注意的是,getAge()的返回值构造(几乎可以肯定)被省略了。但同样,被省略的构造是复制/移动构造,因此即使没有被省略,也不会产生任何输出。

我们根据现有的对象年龄构建新的对象临时,因此需要定义复制基类中的构造函数