暑期C++03 之浅拷贝问题抛出与解决
来源:互联网 发布:3d数据图表制作软件 编辑:程序博客网 时间:2024/06/11 06:15
浅拷贝和深拷贝是我们学习C++语法上不可避免的一部分,这里我们要对指针变量和指针所指向的内存空间变量要了解清楚才能意识到这个问题的关键所在
下面就是我们刚开始碰到的问题
#pragma once#include<iostream>#include<string>using namespace std;class Name1{private:char *p;int len;public:Name1(const char *p){len = strlen(p);p = new char[len+1];strcpy(this->p, p);this->p[len] = '\0';}~Name1(){if (p != NULL){delete []p;len = 0;p = NULL;}}};//浅拷贝 一跑就DANG 因为是浅拷贝 两个指针变量指向同一块内存空间//析构的时候 一个对象会把内存给析构 然后第二个对象析构的时候会再析构一次 造成内存出错void playobj1(){Name1 obj1("abcdefg");Name1 obj2 = obj1;//执行浅拷贝 把指针变量的值拷贝过去 并没有另外开辟一块内存空间}int main1(){playobj1();return 0;}那么我们该怎么解决呢?
#pragma once#include<iostream>#include<string>using namespace std;class Name{private:char *p=NULL;int len;public:Name(const char *myp){len = strlen(myp);p = new char[len+1];//要多申请一个单位的内存strcpy(p, myp);//p[len] = '\0';}//手工编写拷贝构造函数 实现深拷贝Name(const Name& obj){len = obj.len;p = new char[len + 1];strcpy(p, obj.p);}~Name(){if (p != NULL)//析构之前先判断{delete[]p;p = NULL;//注意 这里要让指针指向0 避免野指针的出现len = 0;}}//重载=操作符Name&operator=(const Name& obj){if (p != NULL)//同理先判断指针是否为空{delete[]p;//先释放 并让他指向NULLp = NULL;len = 0;}len = obj.len;p = new char[len + 1];//在申请 并且进行copystrcpy(p, obj.p);return *this;}};void objplay(){Name n1("abcdefg");Name n2 = n1;Name n3 = ("obj3");n3 = n1;//此时会DANG机 因为没有重载等号操作符}int main02(){objplay();return 0;}
阅读全文
0 0
- 暑期C++03 之浅拷贝问题抛出与解决
- Objective-C之深拷贝与浅拷贝
- Objective-C之深拷贝与浅拷贝
- java问题探讨之clone浅拷贝与深拷贝
- c++-深拷贝与浅拷贝
- 【c++】浅拷贝与深拷贝
- Objective-C 深拷贝与浅拷贝
- [C++]深拷贝与浅拷贝
- 深拷贝与浅拷贝问题
- 【C++】拷贝构造函数之浅复制与深复制
- python3之深拷贝与浅拷贝
- IOS开发之路-Objective-C copy(浅拷贝与深拷贝)
- Python对象拷贝之浅拷贝与深拷贝
- [Pointer]在C语言中进行float型与uint8型数组内存拷贝时出现的问题与解决
- 【c++】浅拷贝成功__count解决
- C语言拾遗:位拷贝与值拷贝,浅拷贝与深拷贝
- C语言拾遗:位拷贝与值拷贝,浅拷贝与深拷贝
- 暑期集训之最大公约数问题
- 微信小程序实现高亮效果
- HDU 2276 矩阵快速幂,解法:1循环矩阵31ms,2普通矩阵327ms。
- iOS-GCD定时器
- 无法识别的属性“targetFramework”解决办法
- eclipse 通过Hibernate 逆向生成实体类和映射文件
- 暑期C++03 之浅拷贝问题抛出与解决
- WindowManger与window之详解篇
- mysql exist运用
- 蓝桥杯 ADV-127 算法提高 日期计算
- 关于JavaScript中apply与call的用法意义及区别(转)
- Linux(Ubuntu)怎样设置鼠标速度(灵敏度)
- unity ShaderForge 移动端与PC端表现不同
- 蓝桥杯 ADV-112 算法提高 c++_ch02_01
- 使用Dagger2前你必须了解的一些设计原则