c++动态对象

news2024/10/7 8:29:10

目录

malloc和free动态申请

c++中动态申请

用于数组的 new 和 delete

delete void*问题

使用 new 和 delete 采用相同形式


malloc和free动态申请

在c++中 释放对象时 系统会自动调用析构函数 但在以下代码编译运行后 析构和构造均未调用 所以在c++中不能用malloc和free动态申请空间 而是用new和delete

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

class Person
{
    public:
        Person()
        {

            cout << "构造" << endl;
        }
        ~Person()
        {
            cout << "析构" << endl;
        }
};

void test()
{
    Person *p = (Person *)malloc(sizeof(Person));
    free(p);
}
int main()
{
    test();
    return 0;
}

c++中动态申请

类型 * p = new 类型;

delete p;

申请数组:

类型 * p = new 类型[n];

delete []p;

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
class person
{
    public:
        person()
        {
            cout << "构造" <<endl;
        }
        ~person()
        {
            cout << "析构" <<endl;
        }
};
void test01()
{
    int *p = new int;//申请一块内存 sizeof(int)大小
    cout << *p << endl;
    *p = 100;
    cout << *p << endl;
    delete p;//释放
}
//申请一个对象
void test02()
{
    person *p = new person;//调用无参构造 
    delete p;
    //注意 new对象的数组时 不能调用有参构造 只能调用无参构造
}
//申请一个数组
void test03()
{
    int *p = new int[10];
    for(int i = 0;i<10;i++)
    {
        p[i] = i + 100;
    }
    for(int i = 0;i<10;i++)
    {
        cout<< p[i] <<"";
    }
    cout<<endl;
    delete []p;

}
int main()
{
    test01();
    test02();
    test03();
    return 0;
}

用于数组的 new delete

void test02()
{

        //new时调用有参构造
        person *p = new person(10);

        delete p;

        person *p1 = new person[10]; //注意 new对象的数组时 不能调用有参构造 只能调用无参构造
        delete []p1;
}

delete void*问题

如果对一个 void* 指针执行 delete 操作,这将可能成为一个程序错误,除非指针指向的内容是非常简单的,因为它将不执行析构函数. 以下代码未调用析构函数,导致可用内存减少
void test(){
void * person = new Person( "john" , 20 );
delete person;
}

使用 new delete 采用相同形式

new一个单一的对象时 delete释放单一的对象

new一个数组时 delete释放 [] 这个数组

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

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

相关文章

华为云云耀云服务器L实例评测|使用Docker部署Leanote笔记工具

华为云云耀云服务器L实例评测&#xff5c;使用Docker部署Leanote笔记工具 一、前言1.1 云耀云服务器L实例介绍1.2 Leanote简介 二、本次实践介绍2.1 本次实践简介2.2 本次环境规划 三、购买云耀云服务器L实例3.1 购买云耀云服务器L实例3.3 查看云耀云服务器L实例状态3.4 重置服…

CRM软件系统使用详细流程

很多人不太了解CRM系统&#xff0c;不知道CRM在哪里打开。其实&#xff0c;在线CRM系统使用非常简单&#xff0c;只要您打开浏览器&#xff0c;输入对应网址就可以访问使用&#xff0c;完全不用下载软件&#xff0c;随时随地都可以使用。 1、选择CRM供应商 选择合适的CRM供应…

离子风蛇有什么作用?

离子风蛇的工作原理是通过内置的高压发生器升至高压电晕空气生成正负离子&#xff0c;再随风流覆盖至物体表面&#xff0c;从而中和其所带的正负静电电荷&#xff0c;这是一种用在工厂里面的工业设备&#xff0c;主要的作用是用来消除静电&#xff0c;其次还可以达到除尘和杀菌…

elementui el-dialog 动态生成多个,点击按钮打开对应的 dialog

业务场景&#xff1a; 根据后端返回的数据&#xff0c;动态生成表单&#xff0c;返回的数据中会有表单字段的类型&#xff0c;如果单选、多选、富文本&#xff0c;其它的属性还好说&#xff0c;重点说在富文本&#xff0c;因为我想通过 dialog 弹窗的方式&#xff0c;进行富文…

frp 内网穿透安装配置使用

文档先发一下&#xff08;好像要科学上网&#xff09; Github 项目地址 查看系统架构 需要一个服务器当做服务端进行端口转接&#xff0c;连接服务器之后&#xff0c;输入以下命令查看系统 uname -a拉取程序包 输入以下命令下载 frp 程序包&#xff0c;按版本号改第一个命令…

工业网络通讯技术的发展历程

工业互联网可以通过人、机、物的全面互联&#xff0c;实现产业链、生产链、全价值链的全面连接&#xff0c;将行业、企业的各种数据和信息都通过平台进行处理分析&#xff0c;对整个工厂的生产、运营、采购、销售乃至研发设计进行管理&#xff0c;提高企业的生产效率&#xff0…

完整版:IPSec报文格式

IPSec协议族是IETF&#xff08;Internet Engineering Task Force&#xff09;制定的一系列协议&#xff0c;它为IP数据报提供了高质量的、可互操作的、基于密码学的安全性。 IPSec通过认证头AH&#xff08;Authentication Header&#xff0c;协议号51&#xff09;和封装安全载…

ipad触控笔有必要买原装吗?开学季ipad2023手写笔推荐

随着开学新学期的开始了&#xff0c;而平板电脑也开始在学校里流行了起来&#xff0c;这也给学生们带来了更多的便利。而苹果的原装电容笔&#xff0c;尽管功能很强&#xff0c;但是因为它的价格比较贵&#xff0c;要是你仅仅只是用来做学习和记录笔记的话&#xff0c;所以在国…

用C语言实现牛顿摆控制台动画

题目 用C语言实现牛顿摆动画&#xff0c;模拟小球的运动&#xff0c;如图所示 拆解 通过控制台API定位输出小球运动的只是2边小球&#xff0c;中间小球不运动&#xff0c;只需要固定位置输出左边小球上升下降时&#xff0c;X、Y轴增量一致。右边小球上升下降时&#xff0c;X、…

解决在远程连接的linux服务器上调用matplotlib画图的问题

前言&#xff1a; 我遇到这个问题的时候&#xff0c;在知乎上看到了一个回答&#xff0c;结果评论区看到了一个最简洁的解。 https://zhuanlan.zhihu.com/p/346384579 效果 左边是代码&#xff0c;右边是结果&#xff0c;弊处就是有点慢。 安装步骤 1. 安装插件 在代码处…

荣威 D7 正式亮相,新能源江湖再战

在 2023 成都车展上&#xff0c;荣威回归轿车领域的全新车型——D7 正式亮相。新车将推出纯电和插混的版本。 一、内饰实拍 内饰方面&#xff0c;这也是荣威 D7 的首次开门。可以看到&#xff0c;荣威 D7 将采用类似三联屏的设计&#xff0c;实际采用的是双 12.3 英寸液晶屏。…

linux 多重启动grub2详解

https://www.gnu.org/software/grub/manual/grub/grub.pdf

Revit SDK 介绍:ManipulateForm 体量族的修改

前言 这个例子介绍体量族的修改。包含了创建体量&#xff0c;用API 移动体量族的顶点、边、轮廓&#xff08;面&#xff09;。 内容 效果分步骤展示。 整理&#xff1a; 核心逻辑 创建拉伸体 m_revitDoc.FamilyCreate.NewLoftForm(true, profiles)增加一个截面 form.Add…

解释一下Kubernetes Minikube是什么,以及如何在本地运行一个Minikube集群

文章目录 步骤1&#xff1a;准备环境步骤2&#xff1a;安装和配置Minikube步骤3&#xff1a;验证集群状态步骤4&#xff1a;部署一个示例应用创建一个Deployment部署应用检查部署 步骤5&#xff1a;访问应用获取Minikube IP地址&#xff1a;获取Service的NodePort&#xff1a; …

SEO百度优化基础知识全解析(了解百度SEO标签作用)

百度SEO优化的作用介绍&#xff1a; 百度SEO优化是指通过对网站的内部结构、外部链接、内容质量、用户体验等方面进行优化&#xff0c;提升网站在百度搜索结果中的排名&#xff0c;从而提高网站的曝光率和流量。通过百度SEO优化&#xff0c;可以让更多的潜在用户找到你的网站&…

提升 Markdown 文档协作:Let‘s Markdown介绍与部署

在当今数字化的世界中&#xff0c;我们经常需要分享文本和文档。Markdown 是一种流行的轻量级标记语言&#xff0c;用于格式化文本和创建文档。但是&#xff0c;有时在不同的平台和编辑器之间共享和处理 Markdown 文档可能会带来一些麻烦。为了解决这些问题&#xff0c;诞生了 …

21 Spring Boot整合Redis

一、Redis简介 简单来说 Redis 就是一个使用 C 语言开发的数据库&#xff0c;不过与传统数据库不同的是 Redis 的数据是存在内存中的 &#xff0c;也就是它是内存数据库&#xff0c;所以读写速度非常快&#xff0c;因此 Redis 被广泛应用于缓存方向。 另外&#xff0c;Redis 除…

第5篇 vue的通信框架axios和ui框架-element-ui以及node.js

一 axios的使用 1.1 介绍以及作用 axios是独立于vue的一个项目&#xff0c;基于promise用于浏览器和node.js的http客户端。 在浏览器中可以帮助我们完成 ajax请求的发送在node.js中可以向远程接口发送请求 1.2 案例 二 element-ui组件 1.1 ui组件库 element-ui 是饿了么…

Unity 之 使用定时调用与Update 正常帧更新的运行答疑

文章目录 疑惑代码辨析具体解释 疑惑 就是说&#xff0c;当我们在Start 函数里面定义了一个InvokeRepeating 函数&#xff0c;那么我们又在Update 定义了一个基本操作&#xff0c;想联合控制物体一个往返的一个运动时&#xff0c;我们应该怎么办&#xff1f; 就是说系统是怎么…

【2023数学建模国赛】A题定日镜场的优化设计模型建立

2023年全国大学生数学建模竞赛A题定日镜场的优化设计&#xff0c;目前已写出第四版国赛A题思路和模型详细公式&#xff0c;目录如下&#xff1a; 一、 问题重述... 1 二、 问题分析... 1 三、 模型假设... 6 四、 问题一模型的建立和求解... 6 4.1 定日镜场坐标系的建立...…