互联网面试笔试汇总C/C++-22] 拷贝构造函数调用的时机

题目:下面哪种情况下不会调用拷贝构造函数?

A:当用类的一个对象初始化该类的另一个对象时

B:如果函数的形参是类的对象,调用函数时,进行形参和实参结合时

C:如果函数的返回值是类的对象,函数执行完成返回调用者时

D:用类的一个对象给另一个对象赋值的时

答案:D

分析

A:当用类的一个对象初始化该类的另一个对象时.例如:

 

[cpp][/cpp] view plaincopy

  1. int main()
  2. {
  3.    point A(1,2);
  4.    point B(A);//用对象A初始化对象B,拷贝构造函数被调用.
  5. }

 

 

B: 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时.

 

[cpp][/cpp] view plaincopy

  1. void f(point p)
  2. {
  3. }
  4. main()
  5. {
  6.    point A(1,2);
  7.    f(A);//函数的形参为类的对象时,当调用函数时,拷贝构造函数被调用.
  8. }

 

 

C:如果函数的返回值是类的对象,函数执行完成返回调用者时

 

[cpp][/cpp] view plaincopy

  1. point g()
  2. {
  3.    point A(1,2);
  4.    return A;//函数的返回值是类的对象,返回函数值时,调用拷贝构造函数.
  5. }
  6. void main()
  7. {
  8.    point B;
  9.    B = g();
  10. }

D:用类的一个对象给另一个对象赋值的时

 

这种情况下使用的是类的=运算符,而并不是拷贝构造函数。

 

PS:另外还有一种情况会调用拷贝构造函数,那就是需要产生一个临时类对象时。

标签