广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++构造函数的类型,浅拷贝与深拷贝详解
  • 277
分享到

C++构造函数的类型,浅拷贝与深拷贝详解

2024-04-02 19:04:59 277人浏览 八月长安
摘要

目录一、无参构造函数二、含参构造函数三、拷贝构造函数四、深拷贝和浅拷贝总结一、无参构造函数 1.如果没有定义构造函数,则系统自动调用此默认构造函数,且什么都不做。 2.如果用户自定义

一、无参构造函数

1.如果没有定义构造函数,则系统自动调用此默认构造函数,且什么都不做。

2.如果用户自定义了带参数的构造函数,若还想调用无参的构造函数,必须显示定义

person() {
	cout << "this object is being created." << endl;
}

二、含参构造函数

一般构造函数可以有各种参数形式,一个类可以有多个一般构造函数,前提是参数的个数或者类型不同(基于c++的重载函数原理)

person(string ID, int age, int height, string sex) {
	cout<<"含参构造函数调用"<< endl;
	this.ID = ID;
	this.age = age;
	this.height = height;
	this.sex = sex;
}

含参的构造函数还可以使用快速初始化的方法:

person(string ID, int age, int height, string sex) : ID(ID), age(age), height(height), sex(sex) { }

注意:

  • 初始化参数列表和初始化顺序不可以变动
  • 变量名称(不是参数列表名称)一定要和成员变量名一样

三、拷贝构造函数

使用已经创建好的同一类对象,进行构造另一个对象。

person(const person &p) {
	cout << "拷贝构造函数调用" << endl;
	this->ID = p.ID;
	this->age = p.age;
	this->height = p.height;
	this->sex = p.sex;
}

注意:

但当类中有指针成员时,由系统默认创建该复制构造函数会存在风险,具体原因请查询有关 “浅拷贝“

四、深拷贝和浅拷贝

浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。

例如: person p2 = p1; 这就是浅拷贝,将p1中的成员变量值赋给p2,在这里其实就相当于拷贝构造函数的调用。

但是,浅拷贝,在成员变量是引用类型(指针)时,会出现问题。

  • 传参问题中,地址传递后可以实现swap函数的调用,这就是浅拷贝的原理
  • 当我们使用浅拷贝时,引用类型传递的依旧是地址,这也就是说,拷贝后的对象和拷贝的对象中引用对象指向同一块地址,这样就出现问题了。

在“深拷贝”的情况下,对于对象中动态成员,就不能仅仅简单地赋值了,而应该重新动态分配空间。

如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝。

上面提到,如果没有自定义复制构造函数,则系统会创建默认的复制构造函数,但系统创建的默认复制构造函数只会执行“浅拷贝”,即将被拷贝对象的数据成员的值一一赋值给新创建的对象,若该类的数据成员中有指针成员,则会使得新的对象的指针所指向的地址与被拷贝对象的指针所指向的地址相同,delete该指针时则会导致两次重复delete而出错。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C++构造函数的类型,浅拷贝与深拷贝详解

本文链接: https://www.lsjlt.com/news/144435.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++构造函数的类型,浅拷贝与深拷贝详解
    目录一、无参构造函数二、含参构造函数三、拷贝构造函数四、深拷贝和浅拷贝总结一、无参构造函数 1.如果没有定义构造函数,则系统自动调用此默认构造函数,且什么都不做。 2.如果用户自定义...
    99+
    2022-11-13
  • C++拷贝构造函数(深拷贝与浅拷贝)详解
    对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝...
    99+
    2022-11-15
    拷贝构造函数 深拷贝 浅拷贝
  • C++构造函数的类型,浅拷贝与深拷贝实例分析
    本文小编为大家详细介绍“C++构造函数的类型,浅拷贝与深拷贝实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++构造函数的类型,浅拷贝与深拷贝实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、无...
    99+
    2023-06-29
  • Java中深拷贝,浅拷贝与引用拷贝的区别详解
    目录引用拷贝浅拷贝深拷贝小结引用拷贝 引用拷贝: 引用拷贝不会在堆上创建一个新的对象,只 会在栈上生成一个新的引用地址,最终指向依然是堆上的同一个对象。 //实体类 public c...
    99+
    2022-11-13
  • C++中的拷贝构造函数详解
    目录C++拷贝构造函数(复制构造函数)详解1) 为什么必须是当前类的引用呢?2) 为什么是 const 引用呢?默认拷贝构造函数总结C++拷贝构造函数(复制构造函数)详解 拷贝和复制...
    99+
    2022-11-13
  • Java Cloneable接口的深拷贝与浅拷贝详解
    目录Cloneable接口源码浅拷贝案例Pet类定义Person类定义浅拷贝问题-代码测试深拷贝案例Pet类重写clone()方法Person的clone()方法中调用Pet的clo...
    99+
    2022-11-13
  • Java Cloneable接口的深拷贝与浅拷贝详解
    Java中的Cloneable接口是一个标记接口,用于标识一个类可以被克隆。该接口没有定义任何方法,但是在使用clone()方法进行...
    99+
    2023-08-17
    Java
  • C语言结构体成员赋值的深拷贝与浅拷贝详解
    目录浅拷贝结构体中不存在指针成员变量时结构体中存在指针成员变量时深拷贝结论浅拷贝 C语言中的浅拷贝是指在拷贝过程中,对于指针型成员变量只拷贝指针本身,而不拷贝指针所指向的目标,它按字...
    99+
    2022-11-13
  • Python详细讲解浅拷贝与深拷贝的使用
    目录1.变量的赋值操作2.浅拷贝3.深拷贝4.总结1.变量的赋值操作 只是多生成了一个变量,实际上还是指向同一个对象 # -*- coding: utf-8 -*- class CP...
    99+
    2022-11-11
  • C++中浅拷贝与深拷贝的详解及其作用介绍
    目录概述对象的赋值对象的复制对象复制的用途建立一个新对象函数的参数为类对象函数的返回值为类对象浅拷贝深拷贝概述 浅拷贝 (shallow copy) 只是对指针的拷贝, 拷贝够两个指...
    99+
    2022-11-12
  • C++中的拷贝构造详解
    目录拷贝构造函数拷贝构造中的引用什么情况会使用拷贝构造总结拷贝构造函数 同一个类的对象在内存中有完全相同的结构,如果作为一个整体进行复制或称拷贝是完美可行的,这个拷贝过程只需要拷贝数...
    99+
    2022-11-12
  • C++超详细讲解拷贝构造函数
    目录构造函数特征编译器生成的拷贝构造拷贝构造的初始化列表显式定义拷贝构造的误区结论构造函数 只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对...
    99+
    2022-11-13
  • C++中拷贝构造函数的总结详解
    1.什么是拷贝构造函数: 拷贝构造函数嘛,当然就是拷贝和构造了。(其实很多名字,只要静下心来想一想,就真的是顾名思义呀)拷贝又称复制,因此拷贝构造函数又称复制构造函数。百度百科上是这...
    99+
    2022-11-15
    拷贝构造函数 C++
  • C++中类对象的拷贝构造函数
    本篇内容主要讲解“C++中类对象的拷贝构造函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中类对象的拷贝构造函数”吧!拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一...
    99+
    2023-06-17
  • C++实现拷贝构造函数的方法详解
    目录引入一.什么是拷贝构造函数二.什么情况下使用拷贝构造函数三.使用拷贝构造函数需要注意什么四.深拷贝浅拷贝4.1 浅拷贝4.2 深拷贝引入 对于普通类型的对象来说,他们之间的复制很...
    99+
    2022-11-13
  • c++详细讲解构造函数的拷贝流程
    #include <iostream> #include <string> using namespace std; void func(string str...
    99+
    2022-11-13
  • C++的拷贝构造函数你了解吗
    目录一般情况下的拷贝构造函数:默认拷贝构造函数:浅拷贝和深拷贝:总结拷贝构造函数用以将一个类的对象拷贝给同一个类的另一个对象,比如之前学习过的string类: string s1; ...
    99+
    2022-11-13
  • C++中拷贝构造函数的使用
    目录拷贝构造函数1. 手动定义的拷贝构造函数2. 合成的拷贝构造函数总结拷贝构造函数 拷贝构造函数,它只有一个参数,参数类型是本类的引用。复制构造函数的参数可以是 const 引用,...
    99+
    2022-11-13
  • C++拷贝构造函数中的陷阱
    转自微信公众号:CPP开发前沿 拷贝构造函数大家都比较熟悉,通俗讲就是传入一个对象,拷贝一份副本。不过看似简单的东西,实际不注意的话就会产生问题! #include<iostr...
    99+
    2022-11-12
  • C++的拷贝构造函数是什么
    这篇文章主要介绍了C++的拷贝构造函数是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。拷贝构造函数用以将一个类的对象拷贝给同一个类的另一个对象,比如之前学习过的strin...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作