游戏开发之动态创建对象及构造函数、析构函数的执行(C++基础)
游戏开发之动态创建对象及构造函数、析构函数的执行(C++基础)
示例如下:
//成员初始化列表用来初始化类成员变量class A{public:A(int a){std::cout << "初始化A" << std::endl;}~A(){std::cout << "析构A" << std::endl;}};class B{private:A _a1;A _a2;A _a3;public:B(): _a1(1), _a2(2), _a3(3){std::cout << "初始化b" << std::endl;}~B(){std::cout << "析构B" << std::endl;}};
1.C++对象的创建
- C++使用new创建对象时,会自动调用类的构造函数。
- new的执行步骤:C++编译器先分配内存然后调用构造函数。
①
int main()
{B* p = new B();// delete p;return 0;
}
②
int main()
{B* p = new B();delete p;return 0;
}
TIPS:我们可以发现当我们未执行delete的时候,并未执行析构函数。只有当程序结束后,系统自动回收内存。而当我们执行delete的时候,执行析构函数。且先初始化成员变量,最后初始化类对象。同时回收内存的时候是按照栈区的结构,即栈的数据结构先进后出进行释放。
2.C++对象的释放
delete的执行步骤: 先调用析构函数然后释放内存。
class A
{public:A(){std::cout << "构造函数" << std::endl;}~A(){std::cout << "析构函数" << std::endl;}
};
int main(int argc, char** argv)
{A* a = new A();delete a;a = nullptr;return 0;
}
3.数组的构造函数和析构函数
使用new创建数组时,必须使用delete删除数组的形式释放数组申请的内存空间。
new 数据类型[长度] ; delete[] 指针;
附上大多数编译器动态数组申请空间底层实现原理:单个对象则返回单个对象的首地址,而当创建多个对象时,该数组头部先是这个数组的长度,而后才是真正的对象实体。
- 编译器不一定如此实现,但是很多编译器是这样做的。
- 如果在new表达式中使用[],必须在相应的delete表达式中也使用[]。
- 如果在new表达式中不使用[], 一定不要在相应的delete表达式中使用[].
int main()
{B *p1 = new B[6];delete[]p1;return 0;
}
4.delete void* 时,C++编译器可能会报错。
除非本身就是void*数据类型,否则不要尝试delete void*,因为不会调用析构函数。
例如:
int main()
{B *p1 = new B[6];delete[] (void*)p1;//错误!!return 0;
}
游戏开发之动态创建对象及构造函数、析构函数的执行(C++基础)相关推荐
- 微信小游戏开发实战教程3-绘制网格
**这是小蚂蚁游戏开发公众号原创的第38篇.本篇主要内容包括使用微信小游戏开发工具动态的绘制一个网格,并通过使用变量来控制最终生成的网格的效果. 如果你没有任何的游戏开发经验,欢迎阅读我的" ...
- Unity 3D游戏开发学习教程
用C#用Unity3D制作游戏 你会学到: 您将学习3D游戏开发基础知识,以使用Unity3D引擎推进事物. 到本课程结束时,他们将可以轻松制作任何类型的游戏,无论是3D还是2D MP4 |视频:h2 ...
- 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.8节本章小结
本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.8节本章小结,作者 吴亚峰,更多章节内容可以访问云栖社区"异步社区 ...
- 安卓游戏开发一(超级玛丽)
超级玛丽(1) 前言:想做安卓游戏开发,首先你需要先掌握一些安卓的基础知识,然后学会使用surfaceview绘制一些简单的bitmap,学会了这些,你就具备了游戏开发的最基本条件.本文主要适合一些对 ...
- Cocos2d-x地图随精灵无限滚动与边缘检测----之游戏开发《赵云要格斗》(3)
这里是Evankaka的博客,欢迎大家前面讨论与交流------ 转载请注明出处http://blog.csdn.net/evankaka/article/details/42439707 ...
- SDL游戏开发之一-SDL的简介
本教程为一个长系列,旨在于从零开始边学习SDL边开发游戏. 一.什么是SDL? SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提 ...
- 三七互娱 Java游戏开发工程师 面试(两轮技术+HR面)
(2020春招补招,已拿到offer) 抱着投着试试看的心态去的 自己还是不太了解游戏开发 框架啊这些都没怎么问 比较重视基础知识,面的也基本都是基础知识 所以面完才发现自己太基础的知识反而一问三不知 ...
- 动态加载子节点_微信小游戏开发之场景切换和常驻节点传递数据
主题 场景切换 场景间数据传递方式 小游戏全局背景音效 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有些知识点的 ...
- unity3d模拟树叶飘动_Unity3D独立游戏开发日记(一):动态生成树木
目前写的独立游戏是一个沙盒类型的游戏.游戏DEMO视频如下: 提到沙盒类型的游戏,就有人给出了这样的定义: 游戏世界离现实世界越近,自由度.随机度越高才叫沙盒游戏.所谓自由度,就是你在游戏里想干啥就干 ...
- 2020秋招 C++软件开发/游戏开发 面试知识整理汇总
鄙人的2020秋招目前已经基本结束,最终拿了六家公司的offer,在综合比较之后目前已经有了明确的偏向,那就是去某公司转行Java,至于原因有很多层,我即使在做了这个决定半年后还是不敢肯定这个决定是否 ...
最新文章
- 深入Java泛型(三):泛型的上下边界
- asp.net mvc 接入阿里大于 短信验证码发送
- Burpsuite如何抓取使用了SSL或TLS传输的 IOS App流量
- what's the difference between atime, ctime and mtime
- 搭建自己的博客(二十七):增加登录注册以及个人资料按钮
- Java中string中hashcode_Java String中的hashCode实现
- 如何从“点子”落地到“执行”?—完整解析1个手游传播类mini项目的进化
- number 限制最长数字_阿博的Python之路Number数据类型详解
- testng教程_TestNG教程
- Druid、C3P0、Tomcat Pool的性能测试与选型
- Pychram - 使用介绍
- [Tarjan四连]Tarjan缩点
- 图解TCP/IP(第5版)
- nod32 升级方法
- 这款神器,不仅仅解决你的证件照需求
- 2022年危险化学品经营单位安全管理人员考试练习题及答案
- 好斌c语言教程,C语言学习大纲__斌(讲解).doc.doc
- 小型机 PC服务器 性能,pc服务器小型机
- ML.NET 示例:聚类之客户细分
- 关于手册的页码和有效页清单 - LEP
热门文章
- 谈谈这一两年的成长 | 读研一年半,靠学习收入四十多万 !
- 史**_python保存为txt
- Get不到AI的点?一定要看《程序员的AI书:从代码开始》!
- 《linux核心应用命令速查》连载十二:top:显示进程
- 软件项目的面向对象设计、开发及管理
- 加速爬虫:异步加载asyncio
- java第七章jdbc课后简答题_Java进阶之JDBC面试题(7)
- python最简易入门图片_初学Python只需4步,爬取网站图片
- python项目代做_ECS 170代做、代写Python、data代做、代做Python程序代写Web开发|代写Database...
- rabbitmq接收不到消息_SpringBoot2.x系列教程63--SpringBoot整合消息队列之RabbitMQ详解