C++基础与细节理解

前言

本博客旨在记录C++学习过程中的一些细节知识理解,由于问题的产生并非成体系,所以前期的记录可能会无序一些。烦请读者参阅目录进行快速的问题定位与跳转

C++基础与细节理解

    • 前言
    • 正文部分
      • C++基础:为什么new的时候要使用指针接收?
      • C++基础:如何优雅地用指针指向数组

正文部分

C++基础:为什么new的时候要使用指针接收?

我们经常注意到,在C++编程中,以下两种创建对象的形式是最为常见的:

QPushButton *button1 = new QPushButton("示例1");
QPushButton button2("示例2");

我们知道,方式一将对象创建在堆中,并通过button1指向对象;方式二则是将对象创建在栈上,button2直接表示对象

为什么要这么做?这都是出于更健全的内存维护考虑:

  • 方式一不允许使用非指针指向堆对象,是为了应用智能指针,在对象没有引用的时候,自主的回收对象分配的内存(否则需要显式的delete对象)
  • 方式二由程序在对象作用域内自维护,内存仍是安全的

综上,在编程的时候,我们只推荐使用以上两种对象创建方式,并认为第二种要比第一种更优先(在对象占用内存较小时)

C++基础:如何优雅地用指针指向数组

在进行C++编程的时候,到底是选择一维指针还是二维指针指向某一个数组常常困扰着我们。其实有一个非常优雅的判断方式,那就是确保指针维度与数组维度是一致的

我们首先需要明确一个概念,左值=右值,在左值使用*或者[]用以提升维度,在右值使用*或者[]用以降低维度。通过调整确保左右维度一致的赋值就是语法合规的。

我们以三维数组为例,展示分别以一维指针和二维指针接收数组的形式:

int exampleArr[2][2][2] = {1,2,3,4,5,6};
//用一维数组来接收exampleArr[0]所指向的二维数组的第一个值,即exampleArr[0][0];
int *point1 = *exampleArr[0]; //等价于int *point1 = exampleArr[0][0]
//用二维数组来接收exampleArr[0]所指向的二维数组,即exampleArr[0];
int (*point2)[2] = exampleArr[0];

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

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

相关文章

如何开发嵌入式中断控制系统?

目录 1、中断向量表 2、NVIC(内嵌向量中断控制器) 3、中断使能 4、中断服务函数 在嵌入式开发过程中,中断处理是一个不可或缺的环节。本篇博文将以STM32微控制器为核心案例,深入解析中断处理在MCU开发中的关键步骤和策略。主要有以…

Java - CAP定理

CAP 定理指的是在一个分布式系统中,一致性 Consistency 、可用性 Availability 、分区容 错性 Partition tolerance ,三者不可兼得。  一致性( C ):分布式系统中多个主机之间是否能够保持数据一致的特性。即&…

HttpSessionListener监听器和HttpSessionAttributeListener监听器

1.作用:监听Session创建或销毁,即生命周期监听 2.相关方法: //void sessionCreated(HttpSessionEvent se):创建session时调用 //void sessionDestroyed(HttpSessionEvent se):销毁sessio时调用 3.使用场景: 和前面的ServletCo…

mysql自动安装脚本(快速部署mysql)

mysql_install - 适用于生产环境单实例快速部署 MySQL8.0 自动安装脚本 mysql8_install.sh(执行前修改一下脚本里的配置参数,改成你自己的)(博客末尾) my_test.cnf(博客末尾)(这个…

C语言预读取技术 __builtin_prefetch

__builtin_prefetch 是一个编译器内置函数,用于在编译时向编译器发出指令,要求在执行期间预取内存数据。它通常用于提高程序的性能,特别是对于那些需要频繁访问内存的情况。 __builtin_prefetch 函数的语法如下:c __builtin_prefe…

力扣24 两两交换链表中的节点 Java版本

文章目录 题目解题方法Code 题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:hea…

【五】Python 代理模式

文章目录 5.1 代理模式概述5.1.1 代理介绍5.1.2 代理模式的作用 5.2 代理模式的UML类图5.3 了解不同类型的代理5.3.1虚拟代理5.3.2 远程代理5.3.3 保护代理5.3.4 智能代理 5.4 现实世界中的代理模式5.5 代理模式的优点5.6 门面模式和代理模式之间的比较 5.1 代理模式概述 5.1.…

VSCode 配置自动生成头文件

相关文章 VSCode 开发C/C实用插件分享——codegeex VSCode 开发C/C实用插件分享——koroFileHeader VSCode 配置自动生成头文件 一、snippets二、配置步骤三、效果展示 一、snippets 相信大家对C、C都头文件都不陌生,都会发现每个头文件都会包括下面的这些格式&…

Cent OS7 磁盘挂载:扩展存储空间和自动挂载

文章目录 (1)概述(2)查看磁盘使用情况(3)VMware虚拟机挂载磁盘(4)物理机磁盘挂载(5)ntfs硬盘处理 (1)概述 在Linux系统中&#xff0c…

C#教程(二):继承

1、介绍 在C#中,继承是一种面向对象编程的概念,它允许一个类(子类/派生类)获得另一个类(父类/基类)的属性和方法。这使得可以通过构建新的类,重用现有类的功能,并在不同的类之间建立…

智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.共生生物算法4.实验参数设定5.算法结果6.…

拓展 Amazon S3 技术边界:Amazon S3 Express One Zone 的创新之路

授权说明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 自 Amazon S3 服务推出以来,一直是全球各行各业数百万客…

学习MS Dynamics AX 2012编程开发 1. 了解Dynamics AX 2012

在本章中,您将了解开发环境的结构以及Microsoft Dynamics AX中的开发人员可以访问哪些工具。在本书的第一步演练之后,您将很容易理解著名的Hello World代码,您将知道应用程序对象树中的不同节点代表什么。 以下是您将在本章中学习的一些主题…

linux7安装python3.12.1教程

1.下载tar.gz包 地址:Python Release Python 3.12.1 | Python.org 2.上传包到linux服并解压 cd /home/local/ ll tar -zxvf Python-3.12.1.tgz 3.安装编译python所需环境 yum install -y gcc yum install -y zlib* yum -y install zlib-devel bzip2-devel opens…

JIRA 重置管理员密码

忘记了JIRA管理员密码改怎么办? 在Jira6.4之前需要进到数据库里强行修改数据信息,后来的版本就有好多了,可以设置一个启动参数,帮您找回密码,下面就介绍一下如何找回管理员密码 设置启动参数重置管理员密码 找到设置…

大象elephant目标检测数据集VOC+YOLO格式2300张

大象是长鼻目象科的哺乳动物,有两个属,是世界上最大的陆生动物。其像柱子一样的四肢和宽厚的脚掌可以稳稳支撑住庞大的身体。巨大的头上长有蒲扇状的大耳朵和长且有弹性的鼻子。象耳上有丰富的血管,可以有效散热。鼻子和上唇合而为一的象鼻由…

计算机网络——网络层——OSPF协议的介绍

什么是 OSPF ? OSPF 是一个基于链路状态的自治系统内部路由协议,在 TCP/IP 的网络层中进行路由选择,常用于构建大型企业网络或者服务上的骨干网络。在互联网核心路由器之间也可以使用。 OSPF 概述 OSPF 使用的是 Dijkstra(最短…

制作蓝牙小车(一)

制作控制蓝牙小车app 想制作一个蓝牙小车,通过手机app程序操控小车运行,制作分2个部分(app制作,蓝牙小车硬件以及程序制作),先完成第一个部分app制作,本次app是通过androidstudio软件来制作安卓…

FFmpegd的AVBSF

本章主要介绍AVBSF 文章目录 结构体定义对外函数常见的过滤器 从名字我们可以知道这是个码流过滤器,我们最常用的是一个叫做h264_mp4toannexb_bsf的东东 这个过滤器的作用是把h264以MP4格式的NALU转换为annexb(0x000001) const AVBitStreamF…

centos安装了curl却报 -bash: curl: command not found

前因 我服务器上想用curl下载docker-compress,发现没有curl命令,就去下载安装,安装完成之后,报-bash: curl: command not found 解决方法 [rootcentos ~]# rpm -e --nodeps curl warning: file /usr/bin/curl: remove failed: …