c++ 对象复制引用时何时调用构造函数、析构函数
class TEST{
private :
public :
TEST() {std::cout << "constructor" << std::endl; }
~TEST() {std::cout << "destructor" << std::endl; }
};
class TEST fun(void)
{
TEST t, tt;
return t;
}
int main()
{
class TEST t = fun();
std::cout << "test...test" << std::endl;
}
$ ./pointer_reference
constructor
constructor
destructor
test...test
destructor //main函数中创建 t 实际上就是复制
class TEST{
private :
public :
TEST() {std::cout << "constructor" << std::endl; }
~TEST() {std::cout << "destructor" << std::endl; }
};
class TEST fun(void)
{
TEST t;
TEST tt = t;
return t;
}
int main()
{
class TEST t = fun();
std::cout << "test...test" << std::endl;
}
$ ./pointer_reference
constructor
destructor //创建tt时候没有调用构造函数
test...test
destructor //t 最后被释放
class TEST{
private :
public :
TEST() {std::cout << "constructor" << std::endl; }
~TEST() {std::cout << "destructor" << std::endl; }
};
#if 0 //case 0
void fun(class TEST t)
#else //case 1
void fun(class TEST& t)
#endif
{
return;
}
int main()
{
class TEST t;
fun(t);
std::cout << "test...test" << std::endl;
}
case 0:
$ ./pointer_reference
constructor
destructor
test...test
destructor
case 1:
$ ./pointer_reference
constructor
test...test
destructor
c++ 对象复制引用时何时调用构造函数、析构函数的更多相关文章
- c++,类的对象作为形参时一定会调用复制构造函数吗?
c++,类的对象作为形参时一定会调用复制构造函数吗? 答:如果参数是引用传递,则不会调用任何构造函数:如果是按值传递,则调用复制构造函数,按参数的值构造一个临时对象,这个临时对象仅仅在函数执行是存在, ...
- c++中形参为引用和非引用时调用构造函数
#include<iostream> using namespace std; class numbered { private:static int seq; public: numbe ...
- 对象复制问题 && lvalue-rvalue && 引用
按值传递实参到函数和函数返回临时变量的副本,函数的效率对执行性能来说至关重要 如果避免这样的复制操作,则执行时间可能会大大缩短. class CMessage { private: char * m_ ...
- OC_内存管理(二)对象复制、循环引用问题、自动释放池
循环调用: 1.循环引用的问题 两个对象A.B,有可能会出现特殊情况:A中包含B的实例变量:B中也包含A的实例变量,如果这两个实例变量都是强引用(A有着B的实例变量所有权,B也有A的实例变量所有权 ...
- Java学习笔记----你可能不知道那些知识,对象复制与引用
1.private ,protected,static不能用来修饰interface. 2.java在处理基本数据类型(比如int ,char,double)时,都是採用按值传递的方式运行.除此之外的 ...
- PHP写时复制, 变量复制和对象复制不同!!!
2016年3月18日 15:09:28 星期五 一直以为PHP对象也是写时复制....... 其实: PHP的变量是写时复制, 对象是引用的 写时复制: $a = $b; 如果$b的内容不改变, $a ...
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...
- Java面试 - 复制引用和复制对象的区别?
复制引用:把原对象的地址赋给了一个新的引用变量,只要其中一个对象的属性发生变化,另一个对象的属性也随之发生变化. 复制对象:把原对象的内容赋给了一个新的对象,其中一个对象的属性发生变化,并不影响另一个 ...
- 错误笔记 对象为null时调用改对象的方法会报错
对象为null时调用改对象的方法会报错
随机推荐
- Log4j发送邮件
源码地址:https://github.com/mistbor/Log4jSendMail 引入activation.jar log4j.jar mail.j ...
- 进度条 --- socket ---socketserver
TCP:可靠的面向连接的协议,传输效率低,全双工通信,流数据传输.运用:web浏览器,电子邮件,文件传输程序 UDP:不可靠的,无连接的服务,传输效率高,面向数据包的传输,只能发短消息.运用:dns ...
- oracle10偶然性卡住登陆
连接数据库异常:登陆数据库后以"conn /as sysdba"方式登陆正常,数据库轻载,无压力:于是检查数据库的监听器,输入"lsntctl services" ...
- 0_Simple__vectorAdd + 0_Simple__vectorAdd_nvrtc + 0_Simple__vectorAddDrv
▶ 使用 CUDA Runtime API,运行时编译,Driver API 三种接口计算向量加法 ▶ 源代码,CUDA Runtime API #include <stdio.h> #i ...
- Windows系统日常运维
WINDOWS系统日常运维 http://www.docin.com/p-677263438.html
- vi和vim的三种模式
1.一般模式 用vi 或vim 命令 ——>一般模式 2. 插入模式 i,o,a,r 及其各自大写 ——>插入模式 一般用 i 3.命令行模式 用命令来完成 读取,存盘,替换,离开vim ...
- [ilink32 Error] Error: Unresolved external 'SendARP'
[ilink32 Error] Error: Unresolved external 'SendARP' referenced from E:\APPOBJ\KSRGETMAC.OBJ #pragma ...
- oracle imp dmp
windows>cmd> imp userid=用户名/密码@orcl file=d:\nc60.dmp full=y imp userid=SYSTEM/password@orcl fi ...
- Select Case 的简单实现
FOR %%f in (1,3,5,7,) do if errorlevel == %%f goto CASE%%f echo ERROR ...
- 机器学习入门-随机森林温度预测-增加样本数据 1.sns.pairplot(画出两个关系的散点图) 2.MAE(平均绝对误差) 3.MAPE(准确率指标)
在上一个博客中,我们构建了随机森林温度预测的基础模型,并且研究了特征重要性. 在这个博客中,我们将从两方面来研究数据对预测结果的影响 第一方面:特征不变,只增加样本的数据 第二方面:增加特征数,增加样 ...