Как узнать, что конструктор копирования называется? - PullRequest
2 голосов
/ 16 октября 2019

Рассматривая пример, я знаю, что присвоение одного объекта другому, вызывает конструкторы копирования, Line 2 также вызывает конструктор копирования здесь. Каково общее количество вызовов конструктора копирования?

class Sample{ 
  public:
     void compare(Sample args){    }
};
int main(){
  Sample  s1;
  Sample  s2=s1; //Line 1
  s1.compare(s2); // Line 2
}

1 Ответ

4 голосов
/ 16 октября 2019

Просто добавьте конструктор копирования в определение класса и посмотрите результат.

#include <iostream>
class Sample{ 
  public:
    Sample() = default;
    Sample( const Sample & ) { std::cout << "Sample( const Sample & )\n"; }
     void compare(Sample args){    }
};

int main(){
  Sample  s1;
  Sample  s2=s1; //Line 1
  s1.compare(s2); // Line 2
}

Вывод программы:

Sample( const Sample & )
Sample( const Sample & )

Если комментировать вызов

  // s1.compare(s2); // Line 2

тогда вывод будет

Sample( const Sample & )
...