全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈C++的浅拷贝出现的错误

之前看一些资料提到浅拷贝的问题,即在复制对象时,只是对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。如果对象中存在动态成员,如指针,那么仅仅做浅拷贝是不够的,并且容易引发错误,最经典的例子:

#include <iostream>
#include <stdio.h> 

using namespace std;

class A{
  public:
    A(){m_p = new int(10);};
    ~A(){cout << "destruction function" << endl;delete m_p;}; 
    int* m_p; 
};

void copyTest(A atmp){
  ;
}

int main(){
  A a;
  copyTest(a);
}

执行这段代码会出现崩溃,因为析构函数里的delete m_p执行了两次,而m_p指向的是同一块内存。因为在调用copyTest时传入了对象a,atmp利用a作为参数执行了默认拷贝构造函数,但是只是简单地把对象a的m_p的内存地址拷贝给atmp的m_p,因此这个时候atmp.m_p只是指向了和a.m_p相同的内存块。

当copyTest执行完毕后,临时变量atmp会被销毁,这个时候析构函数被调用,delete了m_p指向的内存。而当main函数执行完毕后,a对象也需要被销毁,这个时候析构函数再次被执行,而这个时候m_p已经不知道指向什么地方了,delete操作引发程序崩溃。

解决这个问题的方法有很多:一种方法是实现智能指针,对m_p进行引用计数,当引用值为0时才执行delete;也可以每次把m_p的初始值设为NULL,每次执行delete操作前先检查m_p是否为NULL,delete后再让m_p指向NULL,这个方法其实道理和智能指针差不多,只是智能指针更合理有效地利用类进行管理;还有一种做法是重写拷贝构造函数,确保在对象复制时进行深拷贝,即重新分配内存空间,并且把a中m_p指向内存的内容拷贝到分配的空间。

以上这种情况只有在利用“值传递”复制对象时才发生,如果我们传递的是指针,就不会有这种情况了:

#include <iostream>
#include <stdio.h> 

using namespace std;

class A{
  public:
    A(){m_p = new int(10);};
    ~A(){cout << "destruction function" << endl;delete m_p;}; 
    int* m_p; 
};

void copyTest(A* atmp){
  ;
}

int main(){
  A* a;
  copyTest(a);
}

因为传递到copyTest的参数只是一个地址,指向的还是对象a,并没有发生对象的复制,当然就不存在上面的深浅拷贝问题了。

以上就是小编为大家带来的浅谈C++的浅拷贝出现的错误全部内容了,希望大家多多支持~


# c  # 浅拷贝  # C++拷贝构造函数(深拷贝与浅拷贝)详解  # C++浅拷贝与深拷贝及引用计数分析  # 深入理解C/C++中的写时拷贝  # 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结  # 深入C++拷贝构造函数的总结详解  # c++中深浅拷贝以及写时拷贝的实现示例代码  # 这个时候  # 的是  # 这种情况  # 时才  # 象中  # 有很多  # 就不  # 完毕后  # 设为  # 两次  # 这段  # 有效地  # 重写  # 什么地方  # 只是一个  # 浅谈  # 即在  # 小编  # 而当  # 最经典 


相关文章: 可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  如何通过远程VPS快速搭建个人网站?  如何设计高效校园网站?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  如何用虚拟主机快速搭建网站?详细步骤解析  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  学校建站服务器如何选型才能满足性能需求?  建站之星在线版空间:自助建站+智能模板一键生成方案  黑客如何通过漏洞一步步攻陷网站服务器?  高端企业智能建站程序:SEO优化与响应式模板定制开发  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  北京专业网站制作设计师招聘,北京白云观官方网站?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  高防服务器如何保障网站安全无虞?  制作网站的基本流程,设计网站的软件是什么?  建站主机选购指南:核心配置与性价比推荐解析  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  建站之星后台密码遗忘?如何快速找回?  网站制作壁纸教程视频,电脑壁纸网站?  如何用西部建站助手快速创建专业网站?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  七夕网站制作视频,七夕大促活动怎么报名?  如何选择可靠的免备案建站服务器?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  建站VPS推荐:2025年高性能服务器配置指南  nginx修改上传文件大小限制的方法  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  黑客如何利用漏洞与弱口令入侵网站服务器?  如何选择高效便捷的WAP商城建站系统?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  宿州网站制作公司兴策,安徽省低保查询网站?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何快速搭建高效WAP手机网站吸引移动用户?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  如何在阿里云ECS服务器部署织梦CMS网站?  如何快速搭建高效WAP手机网站?  建站之家VIP精选网站模板与SEO优化教程整合指南  如何快速搭建虚拟主机网站?新手必看指南  如何快速打造个性化非模板自助建站?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  如何选择PHP开源工具快速搭建网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  建站10G流量真的够用吗?如何应对访问高峰?  焦点电影公司作品,电影焦点结局是什么?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。