C++:拷贝构造函数的初始化列表

news2024/11/15 9:09:29

拷贝构造函数的初始化列表是在拷贝构造函数的定义中出现的一组初始值,用于初始化新创建的对象的成员变量。它的语法是在构造函数的声明后面使用冒号(:)来开头,然后列出要初始化的成员变量和它们的初始值。初始化列表的优点在于它允许在对象构造之前对成员变量进行初始化,并且可以直接初始化成员变量,而不是先调用默认构造函数再进行赋值。这样可以提高效率,避免不必要的额外操作。

示例:
class RolePlayer {
public:
    //带有初始化列表的拷贝构造函数
    RolePlayer(const RolePlayer & other) : m_NPCName(other.m_NPCName), m_nHP(other.m_nHP)   {
        std::cout << "拷贝构造函数执行成功" << std::endl;
    }
    
    void SetName(char * m_NPCName) {
        this->m_NPCName = m_NPCName;
    }
​
    char * GetName() {
        return this->m_NPCName;
    }
    
private:
    char * m_NPCName;
    int m_nHP;

拷贝构造函数使用了初始化列表来初始化成员变量 m_NPCNamem_nHP。这意味着当调用拷贝构造函数时,会将另一个 RolePlayer 对象的 m_NPCNamem_nHP 成员变量的值分别复制到新对象的相应成员变量中。

在函数中进行调用:

int main() {
​
    RolePlayer roleA;
    char szBuffer[] = "WolF1";
    roleA.SetName(szBuffer);
​
    RolePlayer roleB(roleA);
    std::cout << roleB.GetName() << std::endl;
​
​
    system("pause");
    return 0;
}

创建一个 RolePlayer 对象 roleA,创建一个字符数组 szBuffer,并将字符串 "WolF1" 存储在其中。接着调用 SetName 方法,将 szBuffer 中的字符串作为 roleA 的名称设置。使用 roleA 对象创建另一个 RolePlayer 对象 roleB,这将触发拷贝构造函数的调用。在拷贝构造函数中,会将 roleA 的名称和HP值复制到 roleB 中。

最后输出的结果为:

可以看到此时roleB与roleA的名称一样也是WolF1,就是因为在拷贝构造函数中我们携带了初始化列表RolePlayer(const RolePlayer & other) : m_NPCName(other.m_NPCName), m_nHP(other.m_nHP),使得对象在构造之前直接对成员变量进行初始化。

但是在上述内容中存在问题:在拷贝构造函数中,m_NPCName 是一个指向 char 类型的指针,它指向的是动态分配的内存。在拷贝构造函数中只是简单地复制了指针的值,这意味着新对象和原对象将共享相同的内存地址,而不是进行深拷贝。这可能会导致潜在的问题,这个问题我们留到下一篇内容深拷贝与浅拷贝中进行分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1622268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从国内盲盒小程序看国外市场的发展机遇与挑战

近年来&#xff0c;盲盒小程序在国内市场迅速崛起&#xff0c;凭借其独特的营销模式和消费者体验&#xff0c;赢得了大量年轻消费者的喜爱。从国内盲盒小程序的发展中&#xff0c;我们可以窥见国外市场的一些发展机遇与挑战&#xff0c;为进军国际市场提供有益的参考。 首先&a…

[Swift]单元测试

编写单元测试是确保你的代码质量和功能正确性的重要步骤 一、编写单元测试的详细流程 1. 创建一个新的Xcode项目 如果你尚未创建一个项目&#xff0c;首先你需要在Xcode中创建一个新的iOS项目&#xff1a; 打开Xcode&#xff0c;选择“File” > “New” > “Project”…

ARM DMIPS算力说明

ARM DMIPS算力说明 ARM算力参考官网地址 https://en.wikipedia.org/wiki/List_of_ARM_processors Product familyARM architectureProcessorFeatureCache (I / D), MMUTypical MIPS MHzReferenceARM1ARMv1ARM1First implementationNoneARM2ARMv2ARM2ARMv2 added the MUL (mu…

一文带你了解MySQL的DCL语句

文章目录 ☃️DCL☃️管理用户☃️权限控制☃️DCL的重要性 欢迎来到 请回答1024 的博客 &#x1f34e;&#x1f34e;&#x1f34e;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的…

【MySQL】A01、性能优化-结构设计与配置

1、数据库设计原则 1.1、核心原则 不在数据库做运算; cpu计算务必移至业务层; 控制列数量(字段少而精,字段数建议在20以内); 平衡范式与冗余(效率优先&#xff1b;往往牺牲范式) 拒绝3B(拒绝大sql语句&#xff1a;big sql、拒绝大事务&#xff1a;big transaction、拒绝大…

【漏洞复现】Palo Alto Networks PAN-OS GlobalProtect 命令注入漏洞 CVE-2024-3400

漏洞描述 Palo Alto Networks PAN-OS GlobalProtect 命令 Palo Alto Networks PAN-OS GlobalProtect 是Palo Alto Networks 的一款防火墙产品。2024年4月12日,官方披露CVE-2024-3400 Palo Alto Networks GlobalProtect 命令注入漏洞。在特定PAN-OS版本和不同功能配置下,未经…

618哪些好物值得入手?收下这份必买清单!

很快618就要来啦&#xff0c;在这之前一定要好好做攻略。在这个特别的时刻&#xff0c;我们不仅有机会淘到心仪已久的商品&#xff0c;还能享受到超值的折扣和优惠。为了让大家的购物体验更加愉快&#xff0c;我特意整理了一份618必买清单&#xff0c;里面汇聚了各类热门好物&a…

【算法入门-Python】02_递归

一、递归 递归的两个特点&#xff1a;调用自身&#xff1b;结束条件。 def func1(x):print(x)func1(x-1)没有结束条件&#xff0c;si递归。不是递归。 def func2(x)&#xff1a;if x > 0:print(x)func2(x1)递归调用的x1&#xff0c;没有结束条件。不是递归 def func3(x)…

2024最新版本FL Studio21水果编曲软件破解版激活许可证

FL Studio 21水果编曲软件适合广泛的人群使用&#xff0c;包括但不限于以下几类人&#xff1a; 音乐制作人&#xff1a;对于专业的音乐制作人来说&#xff0c;FL Studio 21提供了全面的音乐制作工具和功能&#xff0c;能够满足他们在音乐创作、编曲、混音等方面的需求。他们可以…

VUE父组件向子组件传递值

创作灵感 最近在写一个项目时&#xff0c;遇到了这样的一个需求。我封装了一个组件&#xff0c;这个组件需要被以下两个地方使用&#xff0c;一个是搜索用户时用到&#xff0c;一个是修改用户信息时需要用到。其中&#xff0c;在搜索用户时&#xff0c;可以根据姓名或者账号进…

Git TortoiseGit 详细安装使用教程

前言 Git 是一个免费的开源分布式版本控制系统&#xff0c;是用来保存工程源代码历史状态的命令行工具&#xff0c;旨在处理从小型到非常大型的项目&#xff0c;速度快、效率高。《请查阅Git详细说明》。TortoiseGit 是 Git 的 Windows Shell 界面工具&#xff0c;基于 Tortoi…

Mybatis入门(入门案例,IDEA配置SQL提示,JDBC介绍,lombok介绍)

目录 一、Mybatis入门案例介绍整体步骤创建SpringBoot项目pom依赖准备测试数据新建实体类配置Mybatis数据库连接信息新建接口类,编写SQL代码单元测试 二、IDEA配置SQL提示三、JDBC是什么案例JDBC和Mybatis对比 四、数据库连接池介绍如何实现一个数据库连接池切换数据库连接池 五…

【SpringCloud】LoadBalance负载均衡服务调用快速入门

【SpringCloud】LoadBalance负载均衡服务调用快速入门 文章目录 【SpringCloud】LoadBalance负载均衡服务调用快速入门1. 概述2. 引入依赖3. 配置、验证3.1 配置3.2 验证 1. 概述 官网地址&#xff1a;点击跳转 Spring Cloud LoadBalancer 是由 SpringCloud 官方提供的一个开…

自动化测试用例设计

知人者智&#xff0c;自知者明。大家好&#xff0c;给大家分享一下关于自动化测试用例的设计心得&#xff0c;首先完整的熟悉业务是第一步要做的&#xff0c;不熟悉业务的前提下不会设计出高效且合理的用例&#xff0c;其次是我们要有明确的测试目标&#xff0c;确保我们写的每…

CentOS 7.9.2009 中 Docker 使用 GPU

一、安装nvidia驱动 1.1&#xff0c;查看显卡驱动 # 查看显卡型号 lspci | grep -i nvidia 1.2&#xff0c;进入 PCI devices &#xff0c;输入上一步查询到的 2204 1.3&#xff0c;进入 官方驱动 | NVIDIA&#xff0c;查询 Geforce RTX 3090 驱动并下载 1.4&#xff0c;禁用…

Redis入门到通关之数据结构解析-QuickList

文章目录 ☃️前提概要☃️ 配置项相关☃️简要源码☃️总结 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1…

第十五届蓝桥杯省赛第二场C/C++B组A题【进制】题解(AC)

解题思路 按照题意进行模拟&#xff0c;计算 x x x 的 b b b 进制过程中&#xff0c;若出现余数大于 9 9 9&#xff0c;则说明 x x x 的 b b b 进制一定要用字母进行表示。 #include <iostream> #include <cstring> #include <algorithm> #include &l…

探索UWB模块的潜力:智能家居与物联网的连接者

UWB模块具有精准定位、快速响应、低能耗等特点&#xff0c;在智能家居领域展现出了巨大的潜力&#xff0c;正逐渐成为智能家居与物联网的重要连接者。本文将探讨UWB模块在智能家居与物联网中的关键作用、应用场景以及未来发展趋势&#xff0c;旨在为推动智能家居技术的创新和发…

基于Springboot的租房网站

基于SpringbootVue的租房网站的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 房屋信息 交流论坛 房屋资讯 后台登录 用户管理 房屋类型管理 房屋信息管理 预…

2、选择什么样的机器人本体

如果说世界是物质的&#xff0c;那么应该先制造出机器人的本体&#xff0c;再让她产生灵魂。如果是精神的呢&#xff0c;世界是无中生有的呢&#xff0c;那就先在仿真中研究算法吧。 而我比较崇尚初中哲学的一句话&#xff0c;世界是物质的&#xff0c;物质是运动的&am…