临时对象作为函数返回值返回的分析
来源:互联网 发布:食品标签制作软件下载 编辑:程序博客网 时间:2024/05/19 13:26
代码如下:
#include <iostream>
using namespace std;
class CDemoClass
{
private:
char m_szName[20];
public:
CDemoClass()
{
cout << "构造函数1,this的地址:" << this << endl;
};
CDemoClass(const char* pszName)
{
cout << "构造函数2,this的地址:" << this << endl;
strcpy(this->m_szName, pszName);
}
CDemoClass(const CDemoClass& roOther)
{
cout << "拷贝构造函数,this的地址:" << this << ",other的地址:" << &roOther << endl;
strcpy(CDemoClass::m_szName, roOther.m_szName);
}
~CDemoClass()
{
cout << "析构函数,this的地址:" << this << endl;
}
};
CDemoClass Func()
{
CDemoClass b("哇哈哈");
cout << "变量b的地址:" << &b << endl;
return b;
}
void main()
{
CDemoClass* p = &(Func());
cout << "p = " << p << endl;
CDemoClass a;
a = Func();
cout << "变量a的地址:" << &a << endl;
}
windows上输出如下:
构造函数2,this的地址:0012FDF0
变量b的地址:0012FDF0
拷贝构造函数,this的地址:0012FE3C,other的地址:0012FDF0
析构函数,this的地址:0012FDF0
析构函数,this的地址:0012FE3C -->将临时对象也析构了?
p = 0012FE3C
构造函数1,this的地址:0012FF34
构造函数2,this的地址:0012FDF0
变量b的地址:0012FDF0
拷贝构造函数,this的地址:0012FE58,other的地址:0012FDF0
析构函数,this的地址:0012FDF0
析构函数,this的地址:0012FE58
变量a的地址:0012FF34
析构函数,this的地址:0012FF34
linux上的输出如下:
- 临时对象作为函数返回值返回的分析
- 函数的返回值和临时对象的问题
- 对象作为返回值
- 临时变量作函数的返回值
- 临时对象和局部对象以及函数返回值优化
- 返回临时对象时的拷贝构造函数问题
- 函数返回的临时对象为const类型,const引用
- C++调用函数是如何返回临时对象的
- NotesDocument 作为函数返回值的问题
- const作为函数返回值的作用
- 具有返回值的函数之作为
- 引用作为函数返回值的情况
- 将数组作为函数的返回值
- 指针作为函数的返回值
- 关于Vector作为函数的返回值
- 指针作为函数的返回值
- 【C++】指针作为函数的返回值
- C++以对象作为返回值时编译器的优化,以及临时变量的析构时机
- linux0.11学习1之bootsect
- Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)
- Linux IO子系统和文件系统读写流程
- .NET中使用ODP(Oracle.DataAccess)连接Oracle数据时出现的异常
- S3C2440驱动4.3寸TFT屏程序
- 临时对象作为函数返回值返回的分析
- HDFS1.0源代码解析—DataNode启动(二)
- read 系统调用剖析
- 虚表vtbl
- partitionNew//QuickSort4
- jquery显示隐藏div
- 动态设置BroadcastReceiver的IntentFilter
- 等概率随机函数的实现
- REST教程九:REST设计指南