c++深复制与浅复制区别代码示范vs2015-txwtech

c++深复制与浅复制区别代码示范

区别:

深复制:

CDemo B = A;

B.str[0] = 'K';//B对象里面的元素修改后,A里面不会发生改变。

//--------深复制-----------复制构造函数
    CDemo(CDemo &obj1)
    {
        this->a = obj1.a;
        this->str = new char[1024];//用new关键字动态分配内存,就是深复制。
        if (str!=0)
        {
            strcpy(this->str,obj1.str);
        }
    }

浅复制:

因为调用是隐藏的,看不见的,默认的,自动生成的,复制构造函数。

CDemo B = A;

B.str[0] = 'K';//B对象里面的元素修改后,A里面一起发生改变。

//---------浅复制-----------复制构造函数
    CDemo(CDemo& obj)
    {
       this->a = obj.a;
       this->str = obj.str;//这句是浅复制
       
    }
    //在测试时,分别屏蔽浅复制与深复制,查看结果。txwtech

//自己写了复制构造函数,必须写析构函数释放指针
————————————————
版权声明:本文为CSDN博主「txwtech」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/txwtech/article/details/103308170

 #define _CRT_SECURE_NO_WARNINGS
#include <iostream> using namespace std;
class CDemo
{
public:
CDemo(int pa, char *cstr)
{
this->a = pa;
this->str = new char[];//传递指针,必须使用new动态开辟一块空间
strcpy(this->str,cstr); }
//如下是隐藏的,看不见的,默认的,自动生成的,复制构造函数,这个是 //---------浅复制-----------
//CDemo(CDemo& obj)
//{
// this->a = obj.a;
// this->str = obj.str;//这句是浅复制
//
//}
//在测试时,分别屏蔽浅复制与深复制,查看结果。txwtech //写成深复制构造函数,自己写出来--- //--------深复制-----------
CDemo(CDemo &obj1)
{
this->a = obj1.a;
this->str = new char[];//用new关键字动态分配内存,就是深复制。
if (str!=)
{
strcpy(this->str,obj1.str);
}
}
//自己写了复制构造函数,必须写析构函数释放指针
~CDemo()
{
delete str;
} public:
int a;
char *str; //private: }; int main()
{
CDemo A(,"hello1");
cout << A.a << "," << A.str << endl;
CDemo B = A;
B.str[] = 'K';//
//如果复制B.str="abcde";一个字符串,A的值不会变。
//cout << "修改B的一个字符后:B.str[0] = 'K';发现A的值一起变化了" << endl;
cout << "A.str is: " << A.str << endl; cout << "B.str is : " << B.str << endl; getchar(); return ;
} /*vs2015 严重性 代码 说明 项目 文件 行 禁止显示状态
//错误 C4996 'strcpy': This function or variable may be unsafe.Consider using strcpy_s instead.To //disable deprecation, use _CRT_SECURE_NO_WARNINGS.See online help for details.cc12a_demo d : \users//\tt2018\documents\visual studio 2015\projects\cc12a_demo\cc12a_demo\cc12a_demo.cpp 11
1.放在#include语句之前,且即放在第一行,前面不能有注释,即真正的第一行;定义下面的宏: #define _CRT_SECURE_NO_WARNINGS或 #define _CRT_SECURE_NO_DEPRECATE
https://blog.csdn.net/Young__Fan/article/details/79829265 //https://blog.csdn.net/txwtech/article/details/89765796 */

c++深复制与浅复制区别代码示范vs2015-txwtech的更多相关文章

  1. C++学习基础七——深复制与浅复制

    一.深复制与浅复制基本知识 深复制和浅复制,又称为深拷贝和浅拷贝. 深复制和浅复制的区别如下图1所示: 图1 图1表示的是,定义一个类CDemo,包含int a和char *str两个成员变量, 当深 ...

  2. 深复制与浅复制&&strong,copy修饰符总结

    又是一个老生常谈的话题,可是貌似这个问题,好多ios开发工程师并不能理解透彻,所以简单记录分析一下深复制与浅复制的原理以及strong,copy修饰符的原理和使用.   一.深复制与浅复制      ...

  3. iOS 集合的深复制与浅复制

    概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制 ...

  4. Java中对象的深复制和浅复制详解

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

  5. Java中的深复制与浅复制

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不 复制它所引用的对象. ...

  6. C#深复制与浅复制

    C#深复制与浅复制 C#中对于数据的复制机制虽然简单但是容易让人误解.C#数据类型大体分为值类型(value type)与引用类型(reference type).对于值类型数据,复制的时候直接将数据 ...

  7. clone()方法、深复制和浅复制

    clone方法 Java中没有明确提供指针的概念和用法,而实质上没个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如何去操作这个指针而已. 在实际编程中,经常会遇到从某个已 ...

  8. 实现 $.extend 的深复制和浅复制

    $.extend 是jquery常用的一个方法,该方法通过传第一个布尔型参数可以指定为深复制还是浅复制,如何使用不在本文讨论. 先来理解下什么是深复制: var ob1 = {'name' : 'Ja ...

  9. Java中的clone()----深复制,浅复制

    这篇文章主要介绍了Java中对象的深复制(深克隆)和浅复制(浅克隆) ,需要的朋友可以参考下 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他 ...

随机推荐

  1. ArrayList简介

    ArrayList简介 ArrayList以数组为底层数据结构的集合,是一个动态的数组队列,就是说该类的容量可以增长,与一般的数组不同. public class ArrayList<E> ...

  2. 搭建Istio基础环境

    需求 搭建istio基础环境(基于1.5.1版本) 安装步骤 在安装 Istio 之前,需要一个运行着 Kubernetes 的环境,安装步骤可以参考前面的文章 下载istio,然后解压,然后将 is ...

  3. 看完这篇还不懂Redis的RDB持久化,你们来打我!

    一.为什么需要持久化 redis里有10gb数据,突然停电或者意外宕机了,再启动的时候10gb都没了?!所以需要持久化,宕机后再通过持久化文件将数据恢复. 二.优缺点 1.rdb文件 rdb文件都是二 ...

  4. 坑爹的PostgreSQL的美元符号(有时需要替换成单引号)

    今天想在PostgeSQL数据库里建一个存储过程(或函数也行),由于对存储过程比较生疏,上网搜了很多教程和源代码例子,照着写,发现怎么都不行,甚至把网上教程包括官方教程的源代码原封不动的复制下来一执行 ...

  5. Linux以指定用户非root用户运行程序、进程

    方式一: 使用su命令切换用户运行 su 用户名 方式二: useradd -s /sbin/nologin -M test   -s /sbin/nologin表示创建一个禁止登陆的用户(比如www ...

  6. Alpha冲刺 —— 5.3

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.展 ...

  7. Java实现 LeetCode 801 使序列递增的最小交换次数 (DP)

    801. 使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 A 和 B . 我们可以交换 A[i] 和 B[i] 的元素.注意这两个元素在各自的序列中应该处于相同的位置. 在交换过一些元 ...

  8. Java实现 LeetCode 78 子集

    78. 子集 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], ...

  9. Java中System的详细用法

    System.arraycopy System.arraycopy的函数原型是: public static void arraycopy(Object src, int srcPos, Object ...

  10. Python中的三种等待时间

    一.强制等待 不论页面是否加载完成,都要等待指定时间才能执行下一步,  单位秒,time.sleep(5) import time time.sleep(10) # 强制等待10秒时间 二.隐式等待( ...