C++构造函数之深拷贝与浅拷贝
来源:互联网 发布:爱思mac版下载 编辑:程序博客网 时间:2024/06/09 20:33
如果没有自定义复制构造函数,则系统会创建默认的复制构造函数,但系统创建的默认复制构造函数只会执行“浅拷贝”,即将被拷贝对象的数据成员的值一一赋值给新创建的对象,若该类的数据成员中有指针成员,则会使得新的对象的指针所指向的地址与被拷贝对象的指针所指向的地址相同,delete该指针时则会导致两次重复delete而出错。下面是示例:
//animal.h#include<string>#include<iostream>using namespace std;class tiger{protected:char *decription;public:tiger(int num,char *);tiger(tiger &obj,int num);//深拷贝tiger(tiger &obj);//浅拷贝~tiger();void tigerRun();};
//animal.cpp#include"animal.h"void tiger::tigerRun(){cout<<this->decription<<endl;}tiger::tiger(int num,char *des){this->decription=new char[num];if(this->decription==NULL)cout<<"分配内存失败"<<endl; strcpy(this->decription,des);}//浅拷贝tiger::tiger(tiger &obj){this->decription=obj.decription;}//深拷贝tiger::tiger(tiger &obj,int num){this->decription=new char[num]; if (this->decription==NULL) cout<<"拷贝时内存分配失败!"<<endl;strcpy(this->decription,obj.decription);}tiger::~tiger(){delete []decription;cout<<"调用析构函数"<<endl;}
#include "anmal.h"int main(){tiger *tg=new tiger(100,"黄色");/**浅拷贝,会出错,想要正确运行就注释掉*因为tg和tg1的decription成员指向同一块内存*调用delete后就将这块内存释放了*程序结束时tg1调用自己的析构函数再次释放该块内存导致错误*/ tiger tg1(*tg);//浅拷贝 tiger tg2(*tg,50);//深拷贝delete tg;//释放new分配的内存return 0;}
- 【C++】拷贝构造函数之浅复制与深复制
- C++构造函数之深拷贝与浅拷贝
- 拷贝构造函数与赋值函数;深拷贝,浅拷贝
- 5.c++-拷贝构造函数(深拷贝,浅拷贝)
- c++_拷贝构造函数/浅拷贝/深拷贝
- 拷贝构造函数(深拷贝与浅拷贝)
- C++拷贝构造函数(深拷贝与浅拷贝)详解
- Cpp--拷贝构造函数(深拷贝与浅拷贝)详解
- C++ 拷贝构造函数中浅拷贝与深拷贝
- C++拷贝构造函数与浅拷贝,深拷贝
- C++拷贝构造函数之深拷贝、浅拷贝
- C++学习之拷贝构造函数(深拷贝,浅拷贝)
- 拷贝构造函数之深拷贝浅拷贝
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数(深拷贝,浅拷贝)
- 拷贝构造函数浅拷贝深拷贝
- 拷贝构造函数,浅拷贝,深拷贝
- 拷贝构造函数 深拷贝 浅拷贝
- 函数指针强制类型转换
- opengles 2D渲染性能
- java中的双缓冲技术
- linux/list.h (
- 百度搜索结果页面的参数 输入编码(ie)
- C++构造函数之深拷贝与浅拷贝
- linux/err.h
- window.name实现的跨域数据传输
- ASP.NET 中将文件上传到另外一个服务器
- CATransform3D-Cube
- 一个不错的正则表达式分析工具
- EntityManager方法简介
- ATA Disk在Linux中的驱动架构对比分析
- Linux2.6.28中Scsi Disk驱动IO回调路径分析