首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

深度拷贝的对象?解决思路

2012-03-09 
深度拷贝的对象?#includeiostreamusingnamespacestdclassInternet{public:Internet(char*name,char*add

深度拷贝的对象?
#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
[解决办法]
问的问题觉得有点搞笑

热点排行