#include <iostream>
#include <vector>
#include <initializer_list>
#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; }
};
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的第二个元素,调用拷贝构造函数
}
{
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()
*/
{
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()
*/