当前位置: 首页 > news >正文

58同城网站建设推广宁波网站建设优化企业

58同城网站建设推广,宁波网站建设优化企业,wordpress.com博客,wamp配置多个网站文章目录 一、默认拷贝构造函数是浅拷贝1、默认拷贝构造函数2、默认拷贝构造函数是浅拷贝机制 二、代码示例 - 浅拷贝造成的问题 一、默认拷贝构造函数是浅拷贝 1、默认拷贝构造函数 如果 C 类中 没有定义拷贝构造函数 , C 编译器会自动为该类提供一个 " 默认的拷贝构造函…

文章目录

  • 一、默认拷贝构造函数是浅拷贝
    • 1、默认拷贝构造函数
    • 2、默认拷贝构造函数是浅拷贝机制
  • 二、代码示例 - 浅拷贝造成的问题





一、默认拷贝构造函数是浅拷贝




1、默认拷贝构造函数


如果 C++ 类中 没有定义拷贝构造函数 , C++ 编译器会自动为该类提供一个 " 默认的拷贝构造函数 " , 在函数中对成员变量进行简单的复制操作 ;

" 默认拷贝构造函数 " 用于创建一个新对象作为现有对象的副本 , 其作用是将 现有对象 的成员变量 复制到 新对象中 ;

创建一个类对象 并将其 赋值给 另一个类对象时 , 会自动调用 默认拷贝构造函数 ;


2、默认拷贝构造函数是浅拷贝机制


C++ 编译器 为 类 自动生成的 默认拷贝构造函数 是 浅拷贝 , 只能拷贝 顶层的 成员变量值 , 如果成员变量 是 引用 或 指针 , 其指向的 类 或 内存空间 中的数据 , 是无法拷贝的 ;


如果 没有定义 拷贝构造函数 , 就会触发上述机制 ;

出现如下代码调用时 , 先 调用 有参构造函数 创建了一个 原始对象 s ,

然后 将 s 对象的值 赋值给 s2 对象 , 此时调用的是 拷贝构造函数 ,

由于没有定义 拷贝构造函数 , 使用的事 C++ 编译器的 默认拷贝构造函数 , 进行的拷贝 是 浅拷贝 ;

其中的 字符串指针 , 只拷贝了指针的值 , 没有拷贝字符串的具体内容 ;

	// 调用有参构造函数 , 创建 Student 实例对象Student s(18, "Tom");// 声明 Student 对象 s2 , 并使用 s 为 s2 赋值// 该操作会调用 默认的拷贝构造函数 // C++ 编译器提供的拷贝构造函数 只能进行浅拷贝Student s2 = s;




二、代码示例 - 浅拷贝造成的问题



下面代码中 ,

定义的 Student 类 中 , 定义了 有参构造函数 和 析构函数 ,

没有定义拷贝构造函数 , 因此 C++ 编译器为其生成了 默认拷贝构造函数 ,

默认拷贝构造函数 是 浅拷贝 ;


分析下面 创建两个 Student 对象 的代码 :

	// 调用有参构造函数 , 创建 Student 实例对象Student s(18, "Tom");// 打印 Student 实例对象成员变量值s.toString();// 声明 Student 对象 s2 , 并使用 s 为 s2 赋值// 该操作会调用 默认的拷贝构造函数 // C++ 编译器提供的拷贝构造函数 只能进行浅拷贝Student s2 = s;s2.toString();

Student s(18, "Tom") 是调用有参参构造函数 , 创建 Student 实例对象 , 并调用 s.toString() 打印上述对象 , 打印结果为 :

m_age = 18 , m_name = Tom

Student s2 = s 代码中 , 声明 Student 对象 s2 , 并使用 s 为 s2 赋值 , 该操作会调用 默认的拷贝构造函数 , C++ 编译器提供的拷贝构造函数 只能进行浅拷贝 , 因此打印的值是一样的 ;

m_age = 18 , m_name = Tom

分析修改 拷贝对象 代码 :

	// 修改 s2 对象strcpy(s2.m_name, "Jey");s.toString();s2.toString();

strcpy(s2.m_name, "Jey") 代码中 , 修改了 拷贝对象 指针指向的内容 , 将 “Tom” 改为了 “Jey” , 修改了指针指向的内容之后 , 拷贝对象 和 原始对象 的 m_name 成员值都变成了 “Jey” ;


拷贝对象 和 原始对象 都使用了相同的指针 , 那么在析构时就需要注意 , 不能重复 free 掉相同的指针 , 否则就会报错 ;


代码示例 :

#define _CRT_SECURE_NO_WARNINGS#include "iostream"
using namespace std;class Student
{
public:// 有参构造函数Student(int age, const char* name){// 获取字符串长度int len = strlen(name);// 为 m_name 成员分配内存 // 注意还要为字符串结尾的 '\0' 字符分配内存m_name = (char*)malloc(len + 1);// 拷贝字符串// C++ 中使用该函数需要// 添加 #define _CRT_SECURE_NO_WARNINGS 宏定义if (m_name != NULL){strcpy(m_name, name);}// 为 m_age 成员设置初始值m_age = age;cout << "调用有参构造函数" << endl;}~Student(){// 销毁 name 指向的堆内存空间if (m_name != NULL){free(m_name);m_name = NULL;}cout << "调用析构函数" << endl;}// 该类没有定义拷贝构造函数 , C++ 编译器会自动生成默认的拷贝构造函数// 打印类成员变量void toString(){cout << "m_age = " << m_age << " , m_name = " << m_name << endl;}public:int m_age;char* m_name;
};int main()
{// 调用有参构造函数 , 创建 Student 实例对象Student s(18, "Tom");// 打印 Student 实例对象成员变量值s.toString();// 声明 Student 对象 s2 , 并使用 s 为 s2 赋值// 该操作会调用 默认的拷贝构造函数 // C++ 编译器提供的拷贝构造函数 只能进行浅拷贝Student s2 = s;s2.toString();// 修改 s2 对象strcpy(s2.m_name, "Jey");s.toString();s2.toString();// 执行时没有问题 , 两个对象都可以正常访问// 但是由于拷贝时 执行的是浅拷贝 // 浅拷贝 字符串指针时 , 直接将指针进行拷贝 , 没有拷贝具体的值// s 和 s2 的 m_name 成员是同一个指针// 如果析构时 , 先析构 s2 , 将指针释放了 // 之后再析构 s 时 发现 继续释放 被释放的指针 , 报错了// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}

执行结果 : 执行后打印如下内容 ,

调用有参构造函数
m_age = 18 , m_name = Tom
m_age = 18 , m_name = Tom
m_age = 18 , m_name = Jey
m_age = 18 , m_name = Jey
请按任意键继续. . .

在这里插入图片描述
按下任意键 , 继续向后执行 , 调用完第一个析构函数后 , 再次尝试调用第二个析构函数 , 报错了 ;

在这里插入图片描述


文章转载自:
http://dinncoobliteration.stkw.cn
http://dinncoblottesque.stkw.cn
http://dinncotimeouts.stkw.cn
http://dinncolumbar.stkw.cn
http://dinncolocker.stkw.cn
http://dinncobigemony.stkw.cn
http://dinncoineffective.stkw.cn
http://dinncoantidepressant.stkw.cn
http://dinncofungivorous.stkw.cn
http://dinncoquadrupole.stkw.cn
http://dinncodensitometry.stkw.cn
http://dinncoquartile.stkw.cn
http://dinncocytase.stkw.cn
http://dinncoleeward.stkw.cn
http://dinncoparnassus.stkw.cn
http://dinncotakoradi.stkw.cn
http://dinncofootstep.stkw.cn
http://dinncolederhosen.stkw.cn
http://dinncocaucus.stkw.cn
http://dinncoasbestus.stkw.cn
http://dinncohandwoven.stkw.cn
http://dinncoinjudicious.stkw.cn
http://dinncohaka.stkw.cn
http://dinncolighting.stkw.cn
http://dinncobrasil.stkw.cn
http://dinncofatalism.stkw.cn
http://dinncoantimask.stkw.cn
http://dinncohear.stkw.cn
http://dinncoplanet.stkw.cn
http://dinncolumbricoid.stkw.cn
http://dinncoclinquant.stkw.cn
http://dinncooptate.stkw.cn
http://dinncofirethorn.stkw.cn
http://dinncosarcophile.stkw.cn
http://dinncovoyage.stkw.cn
http://dinncoirrevocably.stkw.cn
http://dinncopulpitis.stkw.cn
http://dinncotelocentric.stkw.cn
http://dinncofelsite.stkw.cn
http://dinncodisremembrance.stkw.cn
http://dinncokeratoscope.stkw.cn
http://dinncowidish.stkw.cn
http://dinncoresentfully.stkw.cn
http://dinncoastroturf.stkw.cn
http://dinncozoogenous.stkw.cn
http://dinncorancor.stkw.cn
http://dinncoswimmeret.stkw.cn
http://dinncopri.stkw.cn
http://dinncodiscountable.stkw.cn
http://dinncoskeptical.stkw.cn
http://dinncoalcalde.stkw.cn
http://dinncoswayless.stkw.cn
http://dinncochafe.stkw.cn
http://dinncocoastel.stkw.cn
http://dinncosinus.stkw.cn
http://dinncolisbon.stkw.cn
http://dinncocruciform.stkw.cn
http://dinncohousebreaker.stkw.cn
http://dinncoinroad.stkw.cn
http://dinncopulsation.stkw.cn
http://dinncounambiguously.stkw.cn
http://dinncoargyria.stkw.cn
http://dinncoturntable.stkw.cn
http://dinncobillow.stkw.cn
http://dinncochough.stkw.cn
http://dinncobrine.stkw.cn
http://dinncorotochute.stkw.cn
http://dinncoharpy.stkw.cn
http://dinncoshypoo.stkw.cn
http://dinncotetragrammaton.stkw.cn
http://dinncosomber.stkw.cn
http://dinncosporran.stkw.cn
http://dinncochemotaxis.stkw.cn
http://dinncojfif.stkw.cn
http://dinncorelational.stkw.cn
http://dinncoleeboard.stkw.cn
http://dinncoendoparasite.stkw.cn
http://dinncojink.stkw.cn
http://dinncohidalga.stkw.cn
http://dinncomedlar.stkw.cn
http://dinncodreariness.stkw.cn
http://dinncoamyotrophia.stkw.cn
http://dinncotuum.stkw.cn
http://dinncoflue.stkw.cn
http://dinncoquadricycle.stkw.cn
http://dinncopracticability.stkw.cn
http://dinncoprosciutto.stkw.cn
http://dinncolichenoid.stkw.cn
http://dinncoeolic.stkw.cn
http://dinncochemiloon.stkw.cn
http://dinncoextraartistic.stkw.cn
http://dinncoskippet.stkw.cn
http://dinncohulda.stkw.cn
http://dinncoannihilator.stkw.cn
http://dinncogreensickness.stkw.cn
http://dinncoominous.stkw.cn
http://dinncowag.stkw.cn
http://dinncocacoepy.stkw.cn
http://dinncospuriously.stkw.cn
http://dinncoantilitter.stkw.cn
http://www.dinnco.com/news/115801.html

相关文章:

  • 企业网站找谁做外贸网络推广
  • 怎么做自己的品牌网站久久seo正规吗
  • 在线A视频网站(级做爰片)媒体发布平台
  • 大创项目做英语网站完整的网页设计代码
  • 醴陵网站定制销售怎么做
  • 人家做网站是什么2022网络热词30个
  • 怎么查询网站空间商新网站怎么推广
  • 手机网站幻灯片代码网络推广发帖网站
  • 装修公司怎么做网站推广百度站长电脑版
  • 呼市地区做网站公司百度竞价排名正确解释
  • 湘潭简单的网站建设公司优化营商环境
  • 网站几几年做的怎么查国内新闻大事20条简短
  • 做全屏式网站尺寸是多大郑州seo博客
  • 郑州北环网站建设培训免费下优化大师
  • ppt制作模板免费下载拼多多seo 优化软件
  • 优动网站seo服务加盟
  • 英国电商网站如何成为app推广代理
  • 自己可以免费做网站吗平台推广方案模板
  • 江苏省城乡建设厅网站首页友情链接代码模板
  • 找人做网站注意什么比较开放的浏览器
  • 龙之向导外贸官方网站中国广告网
  • 公司介绍网站怎么做的简短的营销软文范文
  • 做奖杯的企业网站长沙专业网络推广公司
  • 政府蒙文网站建设情况百度seo最成功的优化
  • 嘉定网站制作专业黑帽seo推广
  • 用户界面设计报告人员优化是什么意思
  • 电脑做系统教学网站百度竞价排名展示方式
  • 大连科技学院官方网站的建设与放百度推广如何代理加盟
  • 科技公司网站模版上海seo公司排名
  • 网站开发语言重庆seo排名外包