C++中的三大缺省函数 之 《深拷贝与浅拷贝》
来源:互联网 发布:淘宝店二级域名收费 编辑:程序博客网 时间:2024/06/05 05:21
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;class Test {public:void show(void){ cout <<data<< endl;}public:Test(char *str = ""){if(str == '\0'){ data = (char *)malloc(sizeof(char));data[0] = '\0';}else{ data = (char *)malloc(sizeof(char)*strlen(str) + 1); strcpy(data,str);}cout <<this<<"构造函数"<<endl;}~Test(){ cout <<data;free(data);cout << "data free"<<endl; data = NULL;cout << this<<"析构函数"<<endl;}
段错误原因:同一空间释放了多次,由于赋值函数系统默认,只是简单的把指针的值赋予新建对象,即就是
对象1与对象2指向同一空间,就是浅拷贝,在对象析构时,发生而同一空间多次释放
改正:
自己写对应的拷贝函数,赋值函数,实现深拷贝
小结:
有时不能默认使用编译器的赋值,拷贝构造函数
改进后的代码:
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;class Test {public:void show(void){ cout <<data<< endl;}public:Test(char *str = ""){if(str == '\0'){ data = (char *)malloc(sizeof(char));data[0] = '\0';}else{ data = (char *)malloc(sizeof(char)*strlen(str) + 1); strcpy(data,str);}cout <<this<<"构造函数"<<endl;}Test &operator = (Test &sd){ if(this != &sd) { data = (char *)malloc(sizeof(char)*strlen(sd.data)+1); strcpy(data,sd.data); } cout <<this <<"赋值函数"<<endl; return *this;}~Test(){ cout <<data;free(data);cout << "data free"<<endl; data = NULL;cout << this<<"析构函数"<<endl;}private: char *data;};int main(){ Test t; Test t1("liusenlin");t = t1; return 0;}
0018FF38构造函数
0018FF34构造函数
0018FF38赋值函数
liusenlindata free
0018FF34析构函数
liusenlindata free
0018FF38析构函数
Press any key to continue
0 0
- C++中的三大缺省函数 之 《深拷贝与浅拷贝》
- 【C++】拷贝构造函数之浅复制与深复制
- C++构造函数之深拷贝与浅拷贝
- C++中的深拷贝与浅拷贝之别
- Java中的clone方法之浅拷贝与深拷贝
- Objective-C之深拷贝与浅拷贝
- Objective-C之深拷贝与浅拷贝
- C中的深拷贝和浅拷贝
- 拷贝构造函数与赋值函数;深拷贝,浅拷贝
- 5.c++-拷贝构造函数(深拷贝,浅拷贝)
- c++_拷贝构造函数/浅拷贝/深拷贝
- c++中的深拷贝与浅拷贝
- C#中的浅拷贝与深拷贝
- C#中的深拷贝与浅拷贝
- Python中的浅拷贝与深拷贝
- java中的深拷贝与浅拷贝
- IOS中的深拷贝与浅拷贝
- python中的深拷贝与浅拷贝
- Java读写二进制文件操作
- 26. Remove Duplicates from Sorted Array
- 入夜。
- 文件上传之servlet3.0实现
- linux内核数据结构之kfifo
- C++中的三大缺省函数 之 《深拷贝与浅拷贝》
- css布局之负外边距的妙用
- Android BaseAdapter的极简封装
- play_java框架学习01
- 有关数据备份、存储全路径、备份设备的一些知识点(文件级备份、块备份)整理
- ANR机制
- RESTful 架构初识
- c# ref out 区别 比较 汇总
- 6.1 支持向量机算法(上)