1.C++中成员对象如果指向了堆内存的空间,如果这时候使用了系统提供的拷贝构造函数(默认浅拷贝),会造成内存重复释放的问题,导致程序down掉,解决办法修改默认的拷贝构造函数,也给新的对象需要堆内存的成员变量去开启一个堆内存, 避免堆内存重复释放

#include "pch.h"
#include <iostream>
using namespace std;
class Person {
public:char *m_name;int m_age;Person(const char *name, int age) {m_name = (char *)malloc(strlen(name) + 1);strcpy(m_name, name);m_age = age;}Person(const Person &p) {// m_name = p.m_name; // 系统提供的浅拷贝, 会引起内存重复释放m_age = p.m_age;m_name = (char *)malloc(strlen(p.m_name) + 1);//修改为深拷贝strcpy(m_name, p.m_name);}~Person() {if (m_name!=NULL) {cout << "person xigou" << endl;free(m_name);m_name = NULL;}}
};void test1() {Person p1("Tom", 18);  // 这个Tom也是分配在常量区吗? 是的,Person p2(p1);  // 调用拷贝构造函数
}int main()
{//test1();//Person * p3 = (Person *)malloc(sizeof(Person)); //着重看下这种内存分配方式  ,整个对象分配在了 堆内存, p3这个指针变量在栈内存,//p3->m_age = 18;//p3->m_name = const_cast<char *>("nihao"); // 这个nihao也是分配在了常量吗? 是的 //free(p3);return 0;
}

C++ 深浅拷贝 01相关推荐

  1. python开发学习-day03(set集合、collection系列 、深浅拷贝、函数)

    s12-20160116-day03 pytho自动化开发 day03 Date:2016.01.16 @南非波波 课程大纲: day2 http://www.cnblogs.com/wupeiqi/ ...

  2. 7.19 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝

    包 包是什么 他是一系列文件的结合体,表现形式就是文件夹 包的本质还是模块 他通常会有__init__.py文件 我们首先回顾一下模块导入的过程 import module首次导入模块(.py文件) ...

  3. day02 格式化输出 运算符 编码 字符串 列表 元组 字典 set集合 深浅拷贝

    day02学习大纲 一. 格式化输出: %s 占位字符串 %d 占位数字 "xxx%sx %sxx" % (变量, 变量) 二. 运算符: a+=b a = a + b and 并 ...

  4. js递归函数及深浅拷贝

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>递归函 ...

  5. python集合类型应用场景_简述Python的深浅拷贝以及应用场景

    原博文 2019-07-16 11:54 − Python的深浅拷贝以及应用场景 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.dee ...

  6. python基础(三元运算+深浅拷贝+函数参数)

    三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 1 书写格式: 2 result = 值1 if 条件 else 值2 3 即如果条件成立,则将值1赋给result ...

  7. python——赋值与深浅拷贝

    结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一--python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时间来 ...

  8. python之深浅拷贝

    对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy # ######### 数字.字符串 ######### n1 = 123 # n1 ...

  9. Java中深浅拷贝之List

    List的浅拷贝 浅拷贝将引用复制.指向的是同一个地址,改变A和B中的任何一个,另一个都会随之发生变化. List浅拷贝(针对List里 装的是对象-----"引用"[基础类型不分 ...

最新文章

  1. 自己试验写的一个文本转语音的一个小程序
  2. 【CV秋季划】人脸算法那么多,如何循序渐进地学习好?
  3. mysql数据库断开连接_解决mysql服务器在无操作超时主动断开连接的情况
  4. python sklearn.svm.SVC() 使用方法
  5. Docker JFrog Artifactory 7.27.10 maven私服(搭建篇)
  6. mysql引号注入_MySql注入
  7. 奥松机器人PHP,Arduino四位七段数码管 LED数码管 4位共阳数码管 显示屏模块
  8. python字符串类型图解_Python基础——数据类型(图解+实例,非常详细!)
  9. 图例放在图的外面_Qt编写自定义控件41-自定义环形图
  10. Linux 监视文件、文件夹改动
  11. 【MATLAB】饼图
  12. 土豆 android 缓存路径,#土豆记事#教你开发Android App之 —— Hello Android
  13. 微信小程序--获取pdf
  14. Ubuntu 16.04 修改Home目录下的 中文目录 为英文目录
  15. python安装 错误 “User installations are disabled via policy on the machine”
  16. OB2263MP小知识
  17. python 开发安卓应用商店_用Python爬取各Android市场应用下载量(3分钟学会)
  18. 奥比中光Orbbec Astra Pro RGBD 3D视觉传感器 之 前言
  19. Tomcatnbsp;Servletnbsp;JSPamp;nbs…
  20. airflow调度方案

热门文章

  1. python - classs内置方法 solt
  2. 微信小程序开发工具最新版本已更新下载(1.02.1804120)
  3. 玩转Android之加速度传感器的使用,模仿微信摇一摇
  4. 求质数算法的N种境界 (N 10) zz
  5. oj运行时错误如何查找原因_VLOOKUP又失灵?避免这四种错误类型
  6. pkill mysql_每天一个linux命令:kill命令
  7. android如何导入活动,关于android:如何将活动值传递给另一个活动(Kotlin)
  8. 初中生学计算机网络应用怎么样,初中生读计算机网络技术专业怎么样?小编解答...
  9. access month函数用法_学会了这7个EXCEL日期函数技巧,老板再让你加班,你找我!...
  10. CSDN编程挑战——《进制转换》