深度拷贝的对象?
#include <iostream>
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构造函数 " < <endl;
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;
cin.get();
}
void show();
protected:
char name[20];
char address[30];
char *cname;
};
void Internet::show()
{
cout < <name < < ": " < <address < <cname < <endl;
}
void test(Internet ts)
{
cout < < "载入test函数 " < <endl;
}
void main()
{
Internet a( "XXXXXXX ", "3333333 ");
Internet b = a;
b.show();
test(b);
}
对于上述深度拷贝的例子,说是浅拷贝资源后在释放资源的时候会产生资源归属不清的情况,导致程序运行出错。为什么上述例子就只有一个成员进行了深度拷贝,其他的为什就不用,是不需要吗? 各位大虾帮忙解答
[解决办法]
为什么上述例子就只有一个成员进行了深度拷贝
----------
strcpy(Internet::name,temp.name);
strcpy(Internet::address,temp.address);
cname=new char[strlen(name)+1];//这里注意,深拷贝的体现!
if(cname!=NULL)
{
strcpy(Internet::cname,name);
}
不都深拷贝了吗?哪个没深拷贝?
[解决办法]
char name[20];//空间啊空间
char address[30]; //空间啊空间
[解决办法]
主要是真对new ,heap分配空间上说的。。
防止多个指向,重复delete
[解决办法]
问的问题觉得有点搞笑