#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class CObj {
public:
CObj() { cout << "CObj构造函数" << endl; }
CObj(const CObj& other) { a = other.a; cout << "CObj拷贝构造函数" << endl; }
CObj& operator = (const CObj& other) { a = other.a; cout << "CObj操作符=重载" << endl; return *this; }
virtual ~CObj() { cout << "~CObj析构函数" << endl; }
private:
int a;
};
void test(CObj _obj) {
}
void test2(CObj& _obj) {
}
void test3(const CObj& _obj) {
{
CObj obj2 = _obj;
}
}
int main(int argc, char* argv[]) {
{
CObj obj; //CObj构造函数
test(obj); //in: CObj拷贝构造函数 --- out: ~CObj析构函数
cout << "--------------------------------------------" << endl;
//~CObj析构函数
}
cout << "\r\n======================================================\r\n" << endl;
{
CObj obj; //CObj构造函数
test2(obj);
cout << "--------------------------------------------" << endl;
//~CObj析构函数
}
cout << "\r\n======================================================\r\n" << endl;
{
CObj obj; //CObj构造函数
test3(obj); //in: -- CObj拷贝构造函数 ~CObj析构函数 -- out:
cout << "--------------------------------------------" << endl;
//~CObj析构函数
}
cout << "\r\n======================================================\r\n" << endl;
{
CObj obj; //CObj构造函数
vector<CObj> vec;
vec.push_back(obj); //CObj拷贝构造函数
vec.clear(); //~CObj析构函数
cout << "--------------------------------------------" << endl;
//~CObj析构函数
}
cout << "\r\n======================================================\r\n" << endl;
{
CObj obj1; //CObj构造函数
CObj obj2; //CObj构造函数
obj2 = obj1; //CObj操作符=重载
cout << "--------------------------------------------" << endl;
//~CObj析构函数 ~CObj析构函数
}
cout << "\r\n======================================================\r\n" << endl;
{
shared_ptr<CObj> sp(new CObj()); //CObj构造函数
shared_ptr<CObj> sp2 = sp;
cout << "--------------------------------------------" << endl;
} //~CObj析构函数
cout << "\r\n======================================================\r\n" << endl;
return 0;
}