深浅拷贝——C++学习笔记

原创 2018年04月17日 16:25:22

[TOC]
画个图说说深浅拷贝
深浅拷贝

举个例子:(当我们使用构造函数时,我们需要考虑使用深拷贝还是浅拷贝)

class String
{
public:
    String(const char* str = "");
    String(const String& s);
    ~String();
private:
    char* _str;
};

//s2(s1)
String s1("hello world!");
String s2(s1); 
//此时一般情况下要使用深拷贝
//(如果使用浅拷贝会带来两个问题 )
//1.修改s1的内容s2的内容也会改变
//2.会调用两次对同一块内存释放

说说深浅拷贝的优缺点:
深拷贝:
 优点:变量存储空间互不干扰。
 缺点:如果变量并不是需要改变,大量使用深拷贝会浪费空间。
浅拷贝:
 优点:节省空间
 缺点:
  1.修改一个变量会影响另一个变量。
  2.会对同一块空间释放两次。
对浅拷贝优化我们引入了引用计数:
画个图克服浅拷贝带来的问题:
浅拷贝优化
这样就解决了第2个缺点,但是第一个缺点依然没有被解决。
下面看看如何优化第一个缺点:(还是画个图,毕竟图会让人记忆深刻些)。
写时拷贝
这样就把第一个问题解决了 。

版权声明:本文为博主原创文章,转载请私信博主。 https://blog.csdn.net/qq_38646470/article/details/79976685

c++深浅拷贝&写时拷贝实现

一:浅拷贝&深拷贝 二:写时拷贝
  • sssssuuuuu666
  • sssssuuuuu666
  • 2017-07-13 09:49:26
  • 858

深浅拷贝解析

详细分析C++深拷贝与浅拷贝区别,并给出相应的示例程序。
  • u011420067
  • u011420067
  • 2016-09-07 15:39:09
  • 1288

C++中的深浅复制_实践示例

类定义中,如果未提供自己的拷贝构造函数,则C++提供一个默认拷贝构造函数,就像没有提供构造函数时, C++提供默认构造函数一样。 C++提供的默认拷贝构造函数工作的方法是:完成一个成员一个成员的拷贝,...
  • u010003835
  • u010003835
  • 2015-08-06 12:32:29
  • 1207

深浅拷贝C++

  • 2013年04月08日 09:22
  • 2KB
  • 下载

C++深浅拷贝浅析

浅拷贝是创建了一个对象用一个现成的对象初始化它的时候只是复制了成员(简单赋值)而没有拷贝分配给成员的资源(如给其指针变量成员分配了动态内存);  深拷贝是当一个对象创建时,如果分配了资源,就需要定义...
  • Denkensk
  • Denkensk
  • 2015-03-09 20:56:41
  • 298

C++String深浅拷贝

C++的一个类里面有6个默认成员函数,意味着如果我们自己不定义这六个函数,那么编译器会使用系统的成员函数,但是一旦我们自己定义了这六个成员函数,那么编译器会调用我们定义的,而不是系统默认的,现在我们主...
  • zhouchaoya142526
  • zhouchaoya142526
  • 2017-07-06 23:19:02
  • 210

C++中深浅拷贝问题以及重载=运算符

在C++中用一个对象去初始另一个对象时会调用拷贝构造函数。 在拷贝时候,会分为深浅拷贝,今天我就这两个问题来写一点我自己的理解。 创建一个类,并用类的对象去初始化另一个类。 代码如...
  • sum_TW
  • sum_TW
  • 2016-10-10 23:26:37
  • 2012

C++和Java的浅层拷贝与深层拷贝

今天上课学到了C++的浅层拷贝与深层拷贝, 于是在这里将C++和Java关于浅层拷贝与深层拷贝做一个对比.一.C++的浅层拷贝与深层拷贝 先来了解一下C++中的复制构造函数: //假设有这样一个TES...
  • dela_
  • dela_
  • 2017-05-24 23:07:26
  • 434

Python中的深浅拷贝详解

要说明Python中的深浅拷贝,可能要涉及到下面的一系列概念需要简单说明下: 变量-引用-对象(可变对象,不可变对象)切片-拷贝-浅拷贝-深拷贝 【变量-对象-引用】 在Python中一切都是对象...
  • Jerry_1126
  • Jerry_1126
  • 2014-12-11 00:08:00
  • 4189

对象和数组的深浅拷贝

浅拷贝直接赋值,例如 var newArray = oldArray; var newObject = oldObject;深拷贝数组1、遍历赋值注意多维数组,判断如果是数组的话(arry1[i...
  • shanqianmin_new
  • shanqianmin_new
  • 2016-07-19 16:46:02
  • 77
收藏助手
不良信息举报
您举报文章:深浅拷贝——C++学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)