C++ primer 构造、析构、赋值测试

复制构造函数在书上列举了五种应用场景,但在G++上发现,在从函数返回时,并不调用复制构造函数

/* ** Copyright (C) QPSOFT.COM All rights reserved. */ #include<string> #include<vector> #include<iostream> using namespace std; class Employee { public: Employee() : name ("NoName"), id (counter) { cout << "不带参数的构造函数!" << "/t" << ++counter << endl; } Employee (std::string nm) : name (nm), id (counter) { cout << "带参数的构造函数:" << "/t" << (++counter) << "/tEmployee (std::string nm) " << endl; } Employee (const Employee& other) : name (other.name), id (counter) { cout << "复制构造函数!" << "/t" << ++counter << endl; } Employee& operator= (const Employee& rhe) { name = rhe.name; cout << "‘=’运算符重载" << endl; return *this; } ~Employee() { cout << "析构函数" << "/t" << (counter--) << endl; } private: std::string name; int id; static int counter; }; int Employee::counter = 0; void fun1 (Employee obj) {} void fun2 (Employee& obj) {} Employee fun3() { Employee obj;//不带参数构造函数 return obj; } int main() { Employee ep;//默认构造函数 Employee ab; Employee sep ("iString"); ab = ep; //=重载 Employee tp = ep; //复制构造函数 vector<Employee> iep(5);//复制构造函数 iep.push_back (ep); //复制构造函数 iep.push_back (ab); //复制构造函数 Employee ee[] = {ep, ab, ep, ep, ab}; //会调用复制构造函数 cout << "----------下面是函数测试----------------" << endl; fun1 (ep); //复制 然后析构 cout << "-----------------------------------------"<<endl; fun2 (ep); cout << "---------------丢弃返回的fun3----------------"<<endl; fun3(); cout << "---------------保存返回的fun3------------"<<endl; ab = fun3(); cout << "---------程序返回!------------------------" << endl; return 0; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值