代码如下:
#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上的输出如下: