游戏开发之动态创建对象及构造函数、析构函数的执行(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++基础)相关推荐

  1. 微信小游戏开发实战教程3-绘制网格

    **这是小蚂蚁游戏开发公众号原创的第38篇.本篇主要内容包括使用微信小游戏开发工具动态的绘制一个网格,并通过使用变量来控制最终生成的网格的效果. 如果你没有任何的游戏开发经验,欢迎阅读我的" ...

  2. Unity 3D游戏开发学习教程

    用C#用Unity3D制作游戏 你会学到: 您将学习3D游戏开发基础知识,以使用Unity3D引擎推进事物. 到本课程结束时,他们将可以轻松制作任何类型的游戏,无论是3D还是2D MP4 |视频:h2 ...

  3. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.8节本章小结

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.8节本章小结,作者 吴亚峰,更多章节内容可以访问云栖社区"异步社区 ...

  4. 安卓游戏开发一(超级玛丽)

    超级玛丽(1) 前言:想做安卓游戏开发,首先你需要先掌握一些安卓的基础知识,然后学会使用surfaceview绘制一些简单的bitmap,学会了这些,你就具备了游戏开发的最基本条件.本文主要适合一些对 ...

  5. Cocos2d-x地图随精灵无限滚动与边缘检测----之游戏开发《赵云要格斗》(3)

    这里是Evankaka的博客,欢迎大家前面讨论与交流------       转载请注明出处http://blog.csdn.net/evankaka/article/details/42439707 ...

  6. SDL游戏开发之一-SDL的简介

    本教程为一个长系列,旨在于从零开始边学习SDL边开发游戏. 一.什么是SDL? SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提 ...

  7. 三七互娱 Java游戏开发工程师 面试(两轮技术+HR面)

    (2020春招补招,已拿到offer) 抱着投着试试看的心态去的 自己还是不太了解游戏开发 框架啊这些都没怎么问 比较重视基础知识,面的也基本都是基础知识 所以面完才发现自己太基础的知识反而一问三不知 ...

  8. 动态加载子节点_微信小游戏开发之场景切换和常驻节点传递数据

    主题 场景切换 场景间数据传递方式 小游戏全局背景音效 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有些知识点的 ...

  9. unity3d模拟树叶飘动_Unity3D独立游戏开发日记(一):动态生成树木

    目前写的独立游戏是一个沙盒类型的游戏.游戏DEMO视频如下: 提到沙盒类型的游戏,就有人给出了这样的定义: 游戏世界离现实世界越近,自由度.随机度越高才叫沙盒游戏.所谓自由度,就是你在游戏里想干啥就干 ...

  10. 2020秋招 C++软件开发/游戏开发 面试知识整理汇总

    鄙人的2020秋招目前已经基本结束,最终拿了六家公司的offer,在综合比较之后目前已经有了明确的偏向,那就是去某公司转行Java,至于原因有很多层,我即使在做了这个决定半年后还是不敢肯定这个决定是否 ...

最新文章

  1. 深入Java泛型(三):泛型的上下边界
  2. asp.net mvc 接入阿里大于 短信验证码发送
  3. Burpsuite如何抓取使用了SSL或TLS传输的 IOS App流量
  4. what's the difference between atime, ctime and mtime
  5. 搭建自己的博客(二十七):增加登录注册以及个人资料按钮
  6. Java中string中hashcode_Java String中的hashCode实现
  7. 如何从“点子”落地到“执行”?—完整解析1个手游传播类mini项目的进化
  8. number 限制最长数字_阿博的Python之路Number数据类型详解
  9. testng教程_TestNG教程
  10. Druid、C3P0、Tomcat Pool的性能测试与选型
  11. Pychram - 使用介绍
  12. [Tarjan四连]Tarjan缩点
  13. 图解TCP/IP(第5版)
  14. nod32 升级方法
  15. 这款神器,不仅仅解决你的证件照需求
  16. 2022年危险化学品经营单位安全管理人员考试练习题及答案
  17. 好斌c语言教程,C语言学习大纲__斌(讲解).doc.doc
  18. 小型机 PC服务器 性能,pc服务器小型机
  19. ML.NET 示例:聚类之客户细分
  20. 关于手册的页码和有效页清单 - LEP

热门文章

  1. 谈谈这一两年的成长 | 读研一年半,靠学习收入四十多万 !
  2. 史**_python保存为txt
  3. Get不到AI的点?一定要看《程序员的AI书:从代码开始》!
  4. 《linux核心应用命令速查》连载十二:top:显示进程
  5. 软件项目的面向对象设计、开发及管理
  6. 加速爬虫:异步加载asyncio
  7. java第七章jdbc课后简答题_Java进阶之JDBC面试题(7)
  8. python最简易入门图片_初学Python只需4步,爬取网站图片
  9. python项目代做_ECS 170代做、代写Python、data代做、代做Python程序代写Web开发|代写Database...
  10. rabbitmq接收不到消息_SpringBoot2.x系列教程63--SpringBoot整合消息队列之RabbitMQ详解