深拷贝和浅拷贝

来源:互联网 发布:模仿台词的软件 编辑:程序博客网 时间:2024/06/09 15:16

浅拷贝程序C++提供的解决方法

显示提供copy构造函数

显示操作重载=号操作,不使用编译器提供的浅copy

#define  _CRT_SECURE_NO_WARNINGS #include <iostream>using namespace std;//class  Name{public:Name(const char *myp)                         //理解:当只有这个构造函数时,对象初始化只会进行地址的直接复制,则此为浅拷贝,不能达到我们的要求{m_len = strlen(myp);m_p =(char *) malloc(m_len + 1); //strcpy(m_p, myp);}//Name obj2 = obj1;//解决方案: 手工的编写拷贝构造函数 使用深copyName(const Name& obj1){m_len = obj1.m_len;m_p = (char *)malloc(m_len + 1);strcpy(m_p, obj1.m_p);}~Name(){if (m_p != NULL){free(m_p);m_p = NULL;m_len = 0;}}protected:private:char *m_p ;int m_len; };//对象析构的时候 出现coredumpvoid objplaymain(){Name obj1("abcdefg");//Name obj2 = obj1;  //C++编译器提供的 默认的copy构造函数  浅拷贝Name obj3("obj3");obj3 = obj1;  // C++编译器提供的 等号操作 也属 浅拷贝}void main91(){objplaymain();cout<<"hello..."<<endl;system("pause");return ;}




原创粉丝点击