如何知道调用了拷贝构造函数?

How to know a copy constructor is called?

考虑到这个例子,我知道将一个对象分配给另一个对象,调用复制构造函数,Line 2 在这里也调用复制构造函数。 这里总共调用了多少次拷贝构造函数?

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

只需将复制构造函数添加到您的 class 定义中并查看结果。

#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 & )