c++:三种实例化对象方式

2023-09-15 10:41:14

1.隐式创建

        首先我们定义一个测试类

class Person {
    private:
      int age;
      string name;
    public:
        Person() {
            cout<<"this is construct~";
        }
        Person(int age, string name) {
            this->age = age;
            this->name = name;
            cout<<"name is: "<<name<<", age is: "<<age<<endl;
        }
};

        然后我们在main方法中隐式创建Person对象

Person p1;
cout<<endl;
Person p2(18, "lili");
cout<<endl;

2.显示创建

        当然,我们也可以像其他编程语言一样,显示创建一个对象

Person p3 = Person();
cout<<endl;
Person p4 = Person(16, "xx");
cout<<endl;

        这种方式,与上面的第一种方式原理基本一致。

3.用new创建

        当然我们还可以用new关键字来创建对象

Person *p5 = new Person();
cout<<endl;
Person *p6 = new Person(14, "yy");

        注意:new出来的对象,都需要用指针接收。

4.上述三种方式的区别

        上面三种方式可以认为是两种方式,因为第一种方式与第二种方式基本相同。那么具体区别在哪里?

1.new出来的对象必须要用指针接收,并且需要显式delete销毁对象释放内存。

2.内存位置不同。
        对于隐式声明

Person p1;

        p1对象位于栈空间

Person *p5 = new Person();

        p5对象位于堆空间

3.内存分配时间不同

  •   使用隐式创建对象的时候,创建支出就已经分配了内存。
  •   使用new的方式,如果对象没有初始化,此时没有分配内存空间,也无法delete。

Person *p = NULL;
delete p;

        注意:上述语句如果执行,会有各种意想不到的情况发生。

4.隐式声明的对象是局部变量,出了函数就没有了。而new出来的指针对象可以在方法之间传递,且该指针对象所指向的堆中的对象实例仍然存在。

5.频繁调用场合并不适合new,就像new申请和释放内存一样。

更多推荐

我用AI画了几张通信工程师工作照,大家看看像不像?

之前我给大家演示过AI写作。今年,我们玩点新花样,尝试一下AI绘画。我注册了百度的文心一格,打算绘制几幅和通信工程师有关的画,邀请大家一起鉴别一下AI的绘画能力。先来个简单的吧。绘画要求①:一个通信工程师在机房加班。大约十几秒钟,结果出来了——这幅画中规中矩。桌面上摆的终端不知道是啥。手是捏鼠标的姿势,可是鼠标明明就在

新概念英语(第二册)复习——Lesson 11 - Lesson15

前言一套教材,少就是多,别怀疑,别较真,努力去做,怕就怕今天用这个,明天用那个,你学十年不如别人学一年。一共96课,你可以每天1文章目录前言Lesson11-Onegoodturndeservesanother原文译文单词Lesson12-Goodbyeandgoodluck原文译文单词Lesson13-TheGree

Jmeter配置不同业务请求比例,应对综合场景压测

背景在进行综合场景压测时,遇到了如何实现不同的请求所占比例不同的问题。有人说将这些请求分别放到单独的线程组下,然后将线程组的线程数按照比例进行配置。这种方法不是很好,因为服务器对不同的请求处理能力不同,有的处理快,有的处理慢。若采取上述方案的话,并不会按照我们预期的比例进行并发。那么如何真实模拟按比例进行并发呢?此前使

【文生图系列】Stable Diffusion Webui安装部署过程中bug汇总(Linux系统)

文章目录bugs虚拟环境pythonPreparingmetadata(setup.py)gfpgan和cythonbugs看网上部署stablediffusionwebui的教程,很简单。而且我也有部署stablediffusionv1/v2的经验,想着应该会很快部署完stablediffusionwebui,但是没

【JavaEE】多线程案例-线程池

文章目录1.什么是线程池2.为什么要使用线程池(线程池有什么优点)3.如何使用Java标准库提供的线程池3.1创建一个线程池对象3.2什么是工厂模式3.3为什么要使用工厂模式3.4Executors创建不同具有不同特性的线程池3.5ThreadPool类的构造方法3.6线程池的拒绝策略3.7调用submit方法添加任务

如何使用高压放大器驱动高容性负载

使用高压放大器驱动高容性负载是一个具有挑战性的任务,需要仔细考虑电路设计和操作技巧。下面西安安泰Aigtek将为您介绍一些关于如何使用高压放大器驱动高容性负载的方法和注意事项。首先,让我们了解一下高容性负载。高容性负载通常指电容值较大的负载元件或电路,在实际应用中常见于声音系统、电力传输和电化学领域等。驱动高容性负载需

Android T 禁止应用添加窗口的操作

序什么情况下会出现我们需要禁止应用添加窗口的情况呢?假如有一个应用的窗口,我们点开后是透明的或者会影响到系统的使用,那么我们就有必要对这个窗口操作一下回顾我们在AndroidTWMS窗口相关流程中所讲的内容禁止应用添加窗口的操作有两种1.直接在客户端对应用禁止添加窗口2.在服务端禁止应用添加窗口客户端对应用禁止添加窗口

9.17 校招 实习 内推 面经

绿泡*泡:neituijunsir交流裙,内推/实习/校招汇总表格1、自动驾驶一周资讯-一汽与Mobileye签署战略合作,小鹏汽车将用经销商销售逐渐替换直营模式,原小鹏汽车副总裁加盟赛力斯自动驾驶一周资讯-一汽与Mobileye签署战略合作,小鹏汽车将用经销商销售逐渐替换直营模式,原小鹏汽车副总裁加盟赛力斯2、校招|

【大数据之Kafka】十五、Kafka-Kraft模式

1Kafka-Kraft架构左图为Kafka现有架构,元数据在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。右图为kraft模式架构(实验性),不再依赖zookeeper集群,而是用三台controller节点代替zookeeper,元数据保存在controll

Python —— excel文件操作(超详细)

背景很多公司还是用excel去管理测试用例的,所以为了减少重复繁琐的导出导出工作,学会如何用代码操作excel表格很实用~1、读取excel文件基本步骤1、操作excel的一些库1、xlrd:读取库,xlwt:写入,现在基本不用,因为只能处理.xls这种格式的数据2、使用openpyxl库:不支持的.xls格式,支持的

Vue.js基础语法下

🎬艳艳耶✌️:个人主页🔥个人专栏:《Spring与Mybatis集成整合》《springMvc使用》⛺️生活的理想,为了不断更新自己!1、事件处理器1.1.概述在Vue中,事件处理器是用来处理DOM事件的方法。它可以在Vue组件中定义和使用,用于响应用户的交互操作。事件处理器的作用是监听DOM事件,并在事件触发时执

热文推荐