第九周项目1—深复制体验(2)
2016-04-23 17:15
239 查看
/* *Copyright(c) 2016.烟台大学计算机与控制工程学院 *ALL rights reserved. *文件名称:test.cpp *作者:杨驰 *完成日期:2016年4月23 *问题描述: 深复制体验,增加复制构造函数 */ #include<iostream> #include<cstring> using namespace std; class A { private: char *a; public: A(char *aa) { a = new char[strlen(aa)+1]; //(a)这样处理的意义在于:不浪费内存空间,节省许多系统单元 strcpy(a, aa); //(b)数据成员a与形式参数aa的关系:a与aa同为指针数组,系统分配的内存空间相同 } A(A &b) { a=new char[strlen(b.a)+1]; strcpy(a,b.a); } ~A() { delete []a; //(c)这样处理的意义在于:释放指针所指向的内存空间,否则会导致动态分配的内存 // 无法回收,使得程序所占的内存越来越大 } void output() { cout<<a<<endl; } }; int main(){ A a("good morning, code monkeys!"); a.output(); A b(a); b.output(); return 0; }
运行结果:
学习心得:
A(A &b)
{
a = b.a;
}
这是一个错误的拷贝构造函数,只是浅拷贝,即把地址拷贝到另一个对象。当原对象被析构时,所含有的a指针也被销毁。但此时目的对象仍然保留了a指针,这时a是个野指针
,会造成错误。
相关文章推荐
- 萬 影 皆 因 月
- 第一冲刺阶段站立会议07
- 浅谈Android移动开发程序员的职业发展之路
- eclipse、Android查看svn更新日志
- 华为測试 公共子串计算
- iOS手机信号网络监听
- Leetcode Shortest Palindrome
- HDU 1411 校庆神秘建筑(欧拉四面体公式)
- 直接拿来用!最火的Android开源项目(完结篇)
- 【NOIP practice】BSOJ 1947 编码 递推
- AVPlayer的使用本地视频
- 程序员累了怎么办?
- [Java]抽象类与接口
- 第五章 列表与超链接
- 深入理解Arrays.sort()
- phpstudy 使用mysql
- Vue 过渡
- 什么是HTTP协议??
- Material Design设计之起步篇
- Guava类库学习--只读设置+函数编程+约束条件+集合操作