C++使用new来初始化指向类的指针

news2025/2/4 11:47:38

C++使用new来初始化类的指针

1.ClassName * p = new ClassName;

调用默认构造函数。

如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如

class NoConstructor    //没写构造函数的类
{
public:
    ~NoConstructor() {}
    void printVal() 
    { 
        cout << m_val << endl; 
    }
private:
    int m_val;
};
NoConstructor* p1 = new NoConstructor;
p1->printVal();`

打印出来的值是 -842150451,也就是未初始化。

2.ClassName * p = new ClassName();

调用默认构造函数。

如果类里没有写默认构造函数,会使用编译器帮我们生成的,并且会初始化成员变量,比如 int 类会被初始化为 0

NoConstructor* p2 = new NoConstructor();
p2->printVal();`

此时打印出来值是 0

3.ClassName * p = new ClassName(arg);

调用自定义构造函数,或含参数的默认构造函数(如果这两种函数都定义了,它们的arg类型必须不同,这是函数重载的要求)。

4.补充

关于几个概念:默认构造函数是指无参的构造函数,或有参数(即形参)、并且为所有形参指定了实参的构造函数。

非默认构造函数称为自定义构造函数。

如果在一个类里,两种默认构造函数都写了,那么new ClassName和new ClassName()都不可用。因为编译器无法确定要使用哪一个构造函数。

C++指针初始化问题

c++中的指针是一个很经典的用法,但是也是最容易出错的,比如定义了一个指针,必须对其进行初始化,不然这个指针指向的是一个未知的内存地址,后续对其操作的时候,会报错。

这只是其次,最让人头疼的就是指针错误问题,往往编译的时候可以通过,在程序运行的时候,就会出现异常,如果对程序不是很熟悉,则不是很容易找到问题所在,我最近就遇到过很多这样的问题,定义了一个结构体指针,使用的时候忘记初始化,导致在后边使用的时候程序报异常。

下面就总结一下c++指针初始化的一些方法,以及我自己遇到的一些问题以及心得体会。

c++指针初始化的一般方法

1.将一个已经在内存中存在变量的地址传递给定义的指针

这个指针就指向这个变量的内存地址(相同的数据类型),完成初始化。

比如:

int a=2;
int *b=&a;

2.利用new开辟一块地址空间

struct test{
       int a;
       int b;
}*t;
void main()
{
    int c=0;
    test *t=new test();
    c=t->a;
}

使用 new开辟的空间,记得使用delete释放,因为new出来的是返回的堆的空间,堆的空间是不会自动释放的,存放变量的栈才会自动释放。

delete释放其实只是释放了申请的这块内存空间,但是指针并没有没撤销,指针还是指向这块地址,但是不可用(靠人品吃饭的有可能可以用),是非法的。所以用delete释放掉一块堆内存时,应该自己手动将指针设置为NULL。

3.把指针设置为NULL或者0

这样做一般只是为了没有具体初始化的时候做的,这样避免了野指针,后面可以使用if(指针==NULL)来判断,然后再进行操作。

自己遇见的问题

我在使用结构体指针的时候,忘记将结构体指针初始化,导致后面访问结构体成员变量的时候出现错误(那种编译没错,执行出错的问题),后来将指针使用new初始化解决,还有一点就是,全局的变量名称与局部变量名称不要一样。

 

 

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

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

相关文章

golang—面试题大全

目录标题 sliceslice和array的区别slice扩容机制slice是否线程安全slice分配到栈上还是堆上扩容过程中是否重新写入go深拷贝发生在什么情况下&#xff1f;切片的深拷贝是怎么做的copy和左值进行初始化区别slice和map的区别 mapmap介绍map的key的类型map对象如何比较map的底层原…

T113-S3-RTL8211网口phy芯片调试

目录 前言 一、RTL8211介绍 二、硬件连接 三、设备树配置 四、内核配置 五、phy芯片配置 六、调试问题 总结 前言 在嵌入式系统开发中&#xff0c;网络连接是至关重要的一部分。T113-S3开发板搭载了RTL8211系列的网口PHY芯片&#xff0c;用于实现以太网连接。在开发过程…

[C语言] 指针

1. 指针是什么 2. 指针和指针类型 3. 野指针 4. 指针运算 5. 指针和数组 6. 二级指针 7. 指针数组 目录 1. 指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针…

《Java-SE-第三十六章》之枚举

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

预知未来:揭示公司倒闭的隐秘迹象

引言 在商业世界中&#xff0c;公司的倒闭是一种常见的现象。然而&#xff0c;对于那些在公司中工作的人来说&#xff0c;这可能是一场灾难。作为一名资深的人力资源专业人员&#xff0c;我认为我们有责任提前察觉公司可能倒闭的迹象&#xff0c;以便我们可以采取适当的行动来…

一起学SF框架系列7.2-spring-AOP-AOP使用

Spring AOP有两种使用模式&#xff1a;AspectJ配置模式和xml配置模式。 AspectJ配置模式 配置 1、加入依赖包&#xff1a; <!--spring aop依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId&…

Gartner发布2023年的存储技术成熟曲线

技术路线说明 Gartner自1995年起开始采用技术成熟度曲线&#xff0c;它描述创新的典型发展过程&#xff0c;即从过热期发展到幻灭低谷期&#xff0c;再到人们最终理解创新在市场或领域内的意义和角色。 一项技术 (或相关创新)在发展到最终成熟期的过程中经历多个阶段&#xff1…

接口也默认继承Object类

目标&#xff1a; 1. 知道接口也默认继承Object类 2. 感受继承和重写在向上转型中的作用有多大 引出问题&#xff1a; 在我用 List接口的引用list 接收ArrayList这个集合类的实例时&#xff08;此处发生向上转型&#xff09;&#xff0c;偶然发现&#xff0c;咦&#xff0c…

【Python常用函数】一文让你彻底掌握Python中的toad.selection.select函数

任何事情都是由量变到质变的过程&#xff0c;学习Python也不例外。只有把一个语言中的常用函数了如指掌了&#xff0c;才能在处理问题的过程中得心应手&#xff0c;快速地找到最优方案。本文和你一起来探索Python中的toad.selection.select函数&#xff0c;让你以最短的时间明白…

Grounding dino + segment anything + stable diffusion 实现图片编辑

目录 总体介绍总体流程 模块介绍目标检测&#xff1a; grounding dino目标分割&#xff1a;Segment Anything Model (SAM)整体思路模型结构&#xff1a;数据引擎 图片绘制 集成样例 其他问题附录 总体介绍 总体流程 本方案用到了三个步骤&#xff0c;按顺序依次为&#xff1a…

YOLOv5入门实践(2)— 手把手教你使用make sense标注数据集(附工具地址+使用教程)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。鉴于labelimg图像标注软件安装起来比较麻烦&#xff0c;本节课再给大家介绍另外一款数据集标注工具。这是一款在线标注数据集的工具&#xff0c;用起来非常的方便。&#x1f308; 前期回顾&#xff1a; YOLOv5入门实践&…

当执行MOV [0001H] 01H指令时,CPU都做了什么?

今天和几位单位大佬聊天时&#xff0c;讨论到一个非常有趣的问题-当程序执行MOV [0001H], 01H计算机实际上都做了哪些工作&#xff1f;乍一看这个问题平平无奇&#xff0c;CPU只是把立即数01H放在了地址为0001的内存里&#xff0c;但仔细想想这个问题远没有那么简单&#xff0c…

SystemVerilog之覆盖率详解

文章目录 1.0 覆盖率前言1.1 覆盖率类型1.2 覆盖策略及覆盖组1.3 覆盖率数据采样1.3.1 bin的创建与使用1.3.2 条件覆盖率1.3.3 翻转覆盖率1.3.4 wildcard覆盖率1.3.5 忽略bin与非法bin 1.4 交叉覆盖率1.4.1 排除部分cross bin1.4.2 精细化交叉覆盖率1.4.3 单个实例的覆盖率1.4.…

定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

下面画出等效电路图 可以知道单片机内必然有一个电阻RX&#xff0c;为了简化分析&#xff0c;我们假设他是线性电阻&#xff08;不带电容&#xff0c;电感的支路&#xff09; 还有一个基础知识&#xff1a; 电容器的充电放电曲线&#xff1a; 还需要知道电容电压的变化是连续…

【简单认识zookeeper+kafka分布式消息队列集群的部署】

文章目录 一、zookeeper1、定义2、工作机制3、Zookeeper 特点4、Zookeeper 数据结构5、Zookeeper 应用场景6、Zookeeper 选举机制&#xff08;1&#xff09;第一次启动选举机制&#xff08;2&#xff09;非第一次启动选举机制 7、部署zookeeper群集 二、消息队列概述1、为什么需…

《线性调频雷达典型有源干扰抑制技术研究》阅读记录

文章目录 《线性调频雷达典型有源干扰抑制技术研究》 阅读记录&#xff08;1&#xff09;研究背景与意义&#xff1a;&#xff08;2&#xff09;有源压制干扰&#xff08;3&#xff09;有源欺骗式干扰&#xff08;4&#xff09;压制干扰的抑制&#xff08;5&#xff09;欺骗干扰…

面试热题(全排列)

给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 先在这里说明一下排列和组合的区别? 组合&#xff1a;是指从一…

[gdc]Rendering ‘God of War Ragnark‘

gdc23&#xff0c; sony santa monica关于god of war的分享&#xff1b; back ground 作者stephen mcauley现在是santa monica的technical director&#xff1b;20年加入santa monica&#xff0c;作为rendering lead&#xff0c;有9年的经验&#xff0c;之前在ubisoft montre…

[鹤城杯 2021]Middle magic 解题思路过程

过程 打开题目&#xff0c;是一道PHP的代码审计。代码如下&#xff1a; <?php highlight_file(__FILE__); include "./flag.php"; include "./result.php"; if(isset($_GET[aaa]) && strlen($_GET[aaa]) < 20){$aaa preg_replace(/^(.*)…

河道水位自动监测预警 yolov5

河道水位自动监测预警系统基于yolov5网络模型AI视频智能水尺读数技术&#xff0c;河道水位自动监测预警系统通过在河道周边布设监控摄像头&#xff0c;实时监测水位的变化&#xff0c;一旦水位超过预设阈值&#xff0c;将自动发出预警信号&#xff0c;并提示相关人员采取相应的…