深拷贝 #include<iostream> #include<stdio.h> using namespace std; class String { public : String(char* str="") : _str(new char [strlen(str )+1]) { strcpy(_str , str); } String(const String& s)//拷贝构造 :_str(NULL) { String tmp(s._str ); swap(_str,tmp._str ); } String& operator =(const String& s ) { swap(_str,s._str ); return *this; } ~ String() { if(_str) { delete[] _str ; } } private : char* _str ; } void test1 () { String s1("s1"); String s2(s1); String s3("s3"); String s4(s3); s1=s4; } int main() { test1(); system("pause"); return 0; } 引用计数浅拷贝 #include<iostream> #include<stdio.h> using namespace std; class String { public : String(char* str="") : _str(new char [strlen(str )+1]) ,_pCount(new int(1)) { strcpy(_str , str); } String( String& s) :_str(s._str ) ,_pCount(s._pCount) { ++(*_pCount); } String& operator =(const String& s ) { if(--(*_pCount)==0) { delete _pCount; delete[] _str; } _str=s._str ; _pCount=s._pCount ; ++(*_pCount); return *this; } ~ String() { if (--(*_pCount)==0&&_str ) { delete _pCount; delete[] _str ; } } private : char* _str ; int* _pCount; }; void testcount () { String s1("s1"); String s2(s1); String s3(s2); String s4("s4"); String s5 (s4); s1=s4; } int main() { testcount(); system("pause"); return 0; }
C++的深拷贝实现
原创
©著作权归作者所有:来自51CTO博客作者拼命学的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:C++实现日期类
下一篇:String 的实现
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Angular_Angular里怎么深拷贝一个数组
Angular里怎么深拷贝一个数组,从群里看见有大佬给的方法。。
数组 Angular 深拷贝 -
【C++】深拷贝和浅拷贝 ④ ( 深拷贝示例 )
一、深拷贝示例1、浅拷贝问题2、自己实现深拷贝二、深拷贝完整代码示例
c++ 拷贝构造函数 深拷贝 浅拷贝 原力计划 -
深拷贝和浅拷贝的区别,如何实现一个深拷贝
在JavaScript中,数据类型分为基本数据类型和引用数据类型。基本数据类型是保存在栈内存中的,引用数据类型的变量是一个指向堆内存中实际对象的引用,这个引用是保存在栈内存中。
javascript 开发语言 ecmascript 浅拷贝 深拷贝 -
深拷贝一个对象会了,怎么深拷贝一个图?
前言在前面,我写过一篇Java的深浅拷贝,那是基于对象的拷贝,但放眼数据结构与算法中人都是一样的
算法 数据结构 java 深拷贝 邻接矩阵 -
C++《深拷贝与浅拷贝》
由于C++提供的默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。
程序员 程序设计 计算机 编译器 动态 -
C++ 浅拷贝 & 深拷贝
C++ 对象的赋值, 赋值, 介绍浅拷贝 (shallow copy) 和深拷贝 (deep copy) 的区别.
#include 深拷贝 浅拷贝 C -
C++ 深拷贝和浅拷贝
深拷贝和浅拷贝:听名词很抽象,本质上,就是值传递和引用传递的区别值传递:指
浅拷贝 深拷贝 #include