调试拷贝赋值运算符和析构函数什么时候起作用

来源:互联网 发布:txt阅读器 for mac 编辑:程序博客网 时间:2024/06/01 14:25
#include <iostream>
#include <vector>
#include <initializer_list>
struct X {
 X() { std::cout << "X()" << std::endl; }
 X(const X&) { std::cout << "X(const X&)" << std::endl; }
 X& operator=(const X&)
 {
  std::cout << "X& operator=(const X&)" << std::endl;
  return *this;
 }
 ~X() { std::cout << "~X()" << std::endl; }
};
void f(const X& rx, X x)
{
 std::vector<X> vec;
 vec.reserve(2);
 vec.push_back(rx);//rx赋值给vec的第一个元素,调用拷贝构造函数
 vec.push_back(x);//x赋值给vec的第二个元素,调用拷贝构造函数
}
int main()
{
 X* px = new X;//调用默认构造函数
 f(*px, *px);//后一个*px调用拷贝构造函数
 delete px;
 return 0;
}
/*
输出结果为:
X()
X(const X&)
X(const X&)
X(const X&)
~X()
~X()
~X()
~X()
*/
阅读全文
0 0
原创粉丝点击