C++学习Day03之new和delete使用

目录

  • 一、程序及输出
    • 1.1 new 和delete基础使用
    • 1.2 利用void*无法调用析构函数
    • 1.3 利用new开辟数组
    • 1.3.1 堆区开辟数组
      • 1.3.2 栈上开辟数组
  • 二、分析与总结


一、程序及输出

1.1 new 和delete基础使用

malloc 和 new 区别

malloc 和 free 属于 库函数   new 和delete属于 运算符
malloc不会调用构造函数   new会调用构造函数
malloc返回void* C++下要强转   new 返回创建的对象的指针

#include<iostream>
using namespace std;class Person
{
public:Person(){cout << "Person构造函数调用" << endl;}Person(int a){cout << "Person有参构造调用" << endl;}~Person(){cout << "Person析构函数调用" << endl;}
};
void test01()
{Person *p = new Person;delete p;
}
int main(){test01();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述

1.2 利用void*无法调用析构函数

不要用void * 去接受new出来的对象,利用void*无法调用析构函数

#include<iostream>
using namespace std;class Person
{
public:Person(){cout << "Person构造函数调用" << endl;}Person(int a){cout << "Person有参构造调用" << endl;}~Person(){cout << "Person析构函数调用" << endl;}
};
//注意事项 不要用void*去接受new出来的对象,利用void*无法调用析构函数
void test02()
{void * p = new Person;delete p;
} 
int main(){test02();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述

1.3 利用new开辟数组

1.3.1 堆区开辟数组

堆区开辟数组,一定会调用默认构造函数
释放数组时候 需要加[]

#include<iostream>
using namespace std;class Person
{
public:Person(){cout << "Person默认构造调用" << endl;}Person(int a){cout << "Person有参构造调用" << endl;}~Person(){cout << "Person析构函数调用" << endl;}
};
void test03()
{//堆区开辟数组,一定会调用默认构造函数Person * pPerson = new Person[10];//释放数组时候  需要加[]delete [] pPerson;
}
int main(){test03();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述

1.3.2 栈上开辟数组

栈上开辟数组,可以不去进行默认构造

#include<iostream>
using namespace std;class Person
{
public:Person(int a){cout << "Person有参构造调用" << endl;}~Person(){cout << "Person析构函数调用" << endl;}
};
void test03()
{//栈上开辟数组,可不可以没有默认构造?可以不去进行默认构造Person pArray[10] = { Person(10), Person(20), Person(20),Person(20),Person(20),Person(20),Person(20),Person(20),Person(20),Person(20) };
}
int main(){test03();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述


二、分析与总结

new delete 是用于动态内存管理的操作符,用于在堆上分配和释放内存。

new 操作符用于在堆上动态分配内存,可以用于创建单个对象、数组或者自定义类型的对象。它的一般语法为:
new Type:用于创建单个对象,返回指向分配的对象的指针。
new Type[Size]:用于创建数组,返回指向数组首元素的指针。
delete 操作符用于释放通过 new 分配的内存,可以用于释放单个对象、数组或者自定义类型的对象的内存。它的一般语法为:
delete Pointer:用于释放单个对象的内存。
delete[] Pointer:用于释放数组的内存。
需要注意的是,使用 new 分配的内存需要使用 delete 来释放,而使用 new[] 分配的数组内存需要使用 delete[] 来释放,否则会导致内存泄漏。

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

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

相关文章

MySQL篇----第七篇

系列文章目录 文章目录 系列文章目录前言一、水平分区二、分库分表之后,id 主键如何处理三、存储过程(特定功能的 SQL 语句集)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你…

SpringBoot-基础篇03

之前搭建了整个开发环境实现了登录注册&#xff0c;springBoot整合mybatis完成增删改查&#xff0c;今天完成分页查询&#xff0c;使用阿里云oss存储照片等资源&#xff0c;后期会尝试自己搭建分布式文件系统来实现。 一&#xff0c;SpringBootMybatis完成分页查询 1&#xff…

介绍docker

一&#xff1a;介绍docker&#xff1a; Docker 并没有单独的图形界面&#xff0c;它主要通过命令行来进行管理和操作 1、 docker ps&#xff1a;显示正在运行的容器。 docker images&#xff1a;显示本地的镜像。 docker run&#xff1a;创建并启动一个新容器。 docker stop&a…

【CSS】margin塌陷和margin合并及其解决方案

【CSS】margin塌陷和margin合并及其解决方案 一、解决margin塌陷的问题二、避免外边距margin重叠&#xff08;margin合并&#xff09; 一、解决margin塌陷的问题 问题&#xff1a;当父元素包裹着一个子元素的时候&#xff0c;当给子元素设置margin-top:100px&#xff0c;此时不…

神经网络基本原理

神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。 神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。 1 介绍 下面是一个包含三个层…

Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器

测试uboot命令&#xff0c;搭建nfs服务器和tftp服务器&#xff0c;是测试uboot非常关键的一步。跳过这一节&#xff0c;后面可能要踩坑。 一、输入“help回车”&#xff0c;查询uboot所支持的命令 二、输入“? bootz回车”&#xff0c;查询“bootz”怎么用 注意&#xff1a;和…

HTTP相关问题

目录 1.从输入URL到页面展示到底发生了什么&#xff1f; 2.HTTP状态码有哪些&#xff1f; 2.1 2XX(成功状态码) 2.2 3XX(重定向状态码) 2.3 4XX(客户端错误状态码) 2.4 5XX(服务端错误状态码) 3.HTTP 请求头中常见的字段有哪些&#xff1f; 4.HTTP和HTTPS有什么区别&…

通过dockerfile 生成自定义nginx镜像

通过dockerfile生成自定义nginx镜像 &#xff01;&#xff01;&#xff01;docker 必须在linux环境下才能进行如果你是window则需要装虚拟机 新建一个文件名字为Dockerfile&#xff0c;无需后缀 文件完整名就是Dockerfile 编写dockerfile FROM nginx RUN echo hello nginx!…

【HTML 基础】语义化标签

文章目录 1. <header>2. <nav>3. <article>4. <section>5. <footer>为什么使用语义化标签结语 在现代的 Web 开发中&#xff0c;语义化标签成为设计网页结构的重要组成部分。通过使用 <header>, <nav>, <article>, <sectio…

函数的连续与间断【高数笔记】

【连续】 分类&#xff0c;分几个&#xff1f;每类特点&#xff1f; 连续条件&#xff0c;是同时满足还是只需其一&#xff1f; 【间断】 分类&#xff0c;分几个大类&#xff0c;又分几个小类&#xff1f;每类特点&#xff1f; 间断条件&#xff0c;是同时满足还是只需其一&am…

使用CHATGPT进行论文写作的缺点和风险

为了真正感受 ChatGPT 的写作潜力&#xff0c;让我们先将其与传统的论文写作方法进行一下比较分析 CHATGPT论文写作的缺点和风险 传统论文写作的考验和磨难很深&#xff1a;费力的研究、组织想法和精心设计的逻辑论证&#xff0c;往往以牺牲你的理智为代价。 进入ChatGPT&am…

zabbix配置自动发现

1.准备一台新的主机&#xff0c;安装相关软件包。 [rootsishi ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm [rootsishi ~]# yum -y install zabbix-agent2.修改zabbix-agent端的配置文件 [rootsishi ~]# vim /etc/z…