深拷贝和浅拷贝 其实就是说关于 复制构造函数的。 也是有指针成员。当类的对象 复制的时候,深拷贝就是 重新申请内存,把指针成员的值,复制过来,浅拷贝 就是不申请内存,这样2个对象指向同一个内存,当其中一个释放的时候,程序出错。(貌似以前看过浅拷贝也有好用的时候,有时间再找下)。
引用跟复制没有关系。
临时对象返回。
#include "stdafx.h"
#include < iostream>
#include <conio.h>
using namespace std;
//class Internet
//{
//public:
// Internet(char*name,char*address)
// {
// cout<<"载入构造函数"<<endl;
// strcpy(Internet::name,name);
// strcpy(Internet::address,address);
// cname=new char[strlen(name)+1];
// if(cname!=NULL)
// {
// strcpy(Internet::cname,name);
// }
// }
// Internet(Internet &temp)
// {
// cout<<"载入COPY构造函数"<
// strcpy(Internet::name,temp.name);
// strcpy(Internet::address,temp.address);
// cname=new char[strlen(name)+1];//这里注意,深拷贝的体现!
// if(cname!=NULL)
// {
// strcpy(Internet::cname,name);
// }
// }
// ~Internet()
// {
// cout<<"载入析构函数!";
// delete[] cname;
// }
//
//protected:
// char name[20];
// char address[30];
// char*cname;
//};
class inter
{
public:
inter(const char* name,const char* address)
{
cout<<"inter 构造函数"<<endl;
strcpy(inter::name,name);
strcpy(inter::address,address);
cname = new char[ strlen(name)+1] ;
if ( cname != NULL)
{
strcpy( cname, name );
}
}
virtual ~inter()
{
cout<<"inter 析构函数"<<endl;
delete[] cname;
}
inter(inter& temp)
{
cout<<"inter 复制构造函数"<<endl;
strcpy(name,temp.name);
strcpy(address,temp.address);
cname = new char[strlen(temp.name)+1] ;
if ( cname!= NULL)
{
strcpy( cname,temp.name );
}
}
void show()
{
cout<<name<<"/t"<<address<<"/t"<<cname<<endl;
}
protected:
char name[20];
char address[20];
char* cname;
};
void main()
{
inter a ("测试","127.0.0.1");
inter b =a ;
b.show();
getch();
}