c++三种实例化对象方式
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申请和释放内存一样。
c++三种实例化对象方式相关推荐
- C++的三种实例化对象方式
一.隐式创建 class CEmployee { private: int age; int id; public: CEmployee() { cout << "这是构造函数& ...
- java .class 实例对象_Java产生Class类的三种实例化对象的方法
Java产生Class类的三种实例化对象的方法 1.object.getClass 2.类名.class直接根据某个具体的类来取得Class实例化对象 3.Class.forName(String c ...
- (转)Spring的三种实例化Bean的方式
http://blog.csdn.net/yerenyuan_pku/article/details/52832793 Spring提供了三种实例化Bean的方式. 使用类构造器实例化. <be ...
- 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程
一.依赖注入DI 学习目标 1)搞清楚构造参数依赖注入的过程及类 2)搞清楚注解方式的属性依赖注入在哪里完成的. 学习思路 1)思考我们手写时是如何做的 2)读 spring 源码对比看它的实现 3) ...
- asp.net session 介绍一三种Session存储方式
asp.net session 介绍一三种Session存储方式 www.firnow.com 时间:2009-03-04 作者:匿名 编辑:sky 点击: 1478 [评论] 对于asp.net的程 ...
- Class java用法,java中Class的三种实例化
1.调用Object类中的getClass()方法:import java.util.Date; public class ReflectTest3 { public static void main ...
- Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress
Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress(转发) 原文 http://cloud.51cto.com/art/201804/570386.ht ...
- SPA优缺点、解决单页面应用的SEO困难问题以及三种网页渲染方式
SPA特点优点缺点总结 1. 单页Web应用(SPA - Single Page web Application) 也就是说只有一个HTML文件的Web应用, 我们就称之为单页Web应用, 就称之为S ...
- Verilog VHDL三种建模描述方式——2选1数据选择器
标题Quartus II 标题 Verilog VHDL三种建模描述方式--2选1数据选择器 1,结构化描述方式: 是使用实例化低层次模块的方法,即调用其他已经定义过的低层次模块对整个电路的功能进行描 ...
最新文章
- 编程模式 之美 -- 抽象工厂模式
- jquery-12 折叠面板如何实现(两种方法)
- 实验五 Java网络编程及安全 实验报告 20135232王玥
- OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()
- php 5.4.39 安装,Lamp 安装(CentOS6.6, php-5.4.39, httpd-2.4.12, mysql-5.6.24)
- mysql每一行数据类型_MySQL_MySQL编程中的6个实用技巧,每一行命令都是用分号(;)作为 - phpStudy...
- intellij自动补全变量名和变量属性
- 复盘图像双线性插值推导细节
- 网络广告的效果测定与评估
- 盖茨再捐200亿美元,谷歌云转投ARM,推特员工因马斯克遭CEO警告,今日更多大新闻在此...
- Windows系统资源监控工具perfmon-只能查看报告。
- openstack云计算平台 2(计算服务、Networking 服务、命令行方式启动实例)
- AR开发有哪些AR库,AR SDK
- 隐藏win10任务栏输入法M图标
- 如何区分np.random.normal()、np.random.randn()、np.random.randint()、np.random.random()、np.random.choice()
- office365离线安装
- 荣耀30s刷鸿蒙,荣耀30S“超过”苹果XS,靠华为鸿蒙框架优化能力
- 如何理解金融中的 “头寸”
- 【跟阿铭学 Linux 第一章】:学习之初
- java计算机毕业设计医护人员排班系统源码+系统+lw+数据库+调试运行