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 */

最新文章

  1. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)
  2. Gnu C的不同于标准C的语法
  3. Android学习笔记(九)
  4. Shell 读取文本内容
  5. SVN - 基础知识
  6. Bootstrap_排版_标题
  7. LintCode-字符串查找
  8. mac开发环境配置
  9. [js高手之路]this知多少
  10. 创建hbase-indexer出现 0 running
  11. Java关键字之static
  12. svn与cvs的一些比较
  13. GPS文件中的C1---&gt;P1转换
  14. [原] RTTI 为什么type_info 有比较操作
  15. php 批量下载文件
  16. UNIX环境高级编程--第一章 UNIX基础知识
  17. Weblogic domain扩展教程
  18. RACSignal常见用法
  19. 【刷题】BZOJ 4254 Aerial Tramway
  20. select查询

热门文章

  1. FPGA开发工具套餐搭配推荐及软件链接 (更新于2020.03.16)
  2. Unity中激活子物体
  3. 初尝 Blazor WebAssembly
  4. 小智的旅行(Bridge)51nod 提高组试题
  5. [256个管理学理论]005.羊群效应(Herd Behavior)
  6. [PHP学习教程 - 网络]002.获取网页内容(URL Content)
  7. nacos 配置
  8. PMP 冲!|项目整合管理
  9. 跨域解决方案 - webpack devServer
  10. Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask