
C++
文章平均质量分 79
Brother灬Nam
这个作者很懒,什么都没留下…
展开
-
C++中的资源管理
C++中最重要, 也最令人头疼的事情之一就是资源管理。原则上,每次在堆区用关键字new申请一块内存,必须对应一个delete来释放它。对应一般的小程序,通过细心地写代码,很容易做到。但当程序变大、变复杂的时候,仅仅依靠谨慎的编写程序也是很难做到的。考虑以下几种情况:1. 用new申请资源与用delete释放资源之间的跨度比较大,很容易在做完中间一系列的任务后忘记最初曾申请过资源,导致未释放它。原创 2012-10-07 09:02:16 · 4257 阅读 · 2 评论 -
【D3D11游戏编程】学习笔记二:XNAMath之XMVECTOR
(注:【D3D11游戏编程】学习笔记系列由优快云作者BonChoix所写,转载请注明出处:http://blog.youkuaiyun.com/BonChoix,谢谢~) 一、XNA Math简介 在D3D10及之前的版本中,3D数学库是伴随在D3DX库中的。在D3D11版中,3D数学库被单独隔离出来,为XNA Math库,功能和之前基本一样,但是建立在SIMD指令上,原创 2012-12-11 02:55:01 · 14869 阅读 · 11 评论 -
【D3D11游戏编程】学习笔记九:编译Effect的方法
(注:【D3D11游戏编程】学习笔记系列由优快云作者BonChoix所写,转载请注明出处:http://blog.youkuaiyun.com/BonChoix,谢谢~) 在D3D11应用程序中,对于写好的Effect程序进行编译有如下几种常见方法: 1. 在运行期编译 用这种方法,我们只管写好Effect代码即可,不用关心其编译问题,而是在C++程序中,通原创 2012-12-18 02:46:05 · 13325 阅读 · 4 评论 -
【D3D11游戏编程】学习笔记十三:内存对齐的一点思考
(注:【D3D11游戏编程】学习笔记系列由优快云作者BonChoix所写,转载请注明出处:http://blog.youkuaiyun.com/BonChoix,谢谢~) 不知你是否还有印象,在上一篇中提到三种光源的结构体时,无论是C++中的定义还是HLSL中的定义,都存在着名为"unused"的成员(平行光和点光源)。如下为C++程序中对平行光的定义: //平行光 struct原创 2012-12-27 23:02:09 · 9163 阅读 · 3 评论 -
用const、enum、inline替代#define
在C语言程序设计中,define被大量地使用,用来定义常量或者宏,以减少代码重复及提高可维护性。但在C++中,引进了const、enum、inline后,大多数使用define的地方都可以用它们来代替(当然#ifndef、#define、#endif这种条件编译除外)。以下是几点提倡用const、enum、inline而不用define的理由: 1. 定义常量原创 2012-10-28 07:49:37 · 4100 阅读 · 0 评论 -
C++迭代器之'反向迭代器'
反向迭代器(Reverse Iterator)是普通迭代器的适配器,通过重新定义自增和自减操作,以达到按反序遍历元素的目的。如果在标准算法库中用反向迭代器来代替普通的迭代器,那么运行结果与正常情况下相反。除此之外,其用法与普通迭代器完全一样,我们不作详细讨论。 这里主要讨论的是反向迭代器的一个很特殊、也很容易出错的性质,即它的“逻辑位置”与“物理位置”。先通过看一个例子开始:v原创 2012-10-11 20:00:00 · 6578 阅读 · 0 评论 -
C++迭代器之'插入迭代器'
插入迭代器(Insert Iterator),又叫插入器(Inserter),是继上次的反向迭代器之后C++中的又一个迭代器适配器。插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作。插入迭代器对标准算法库而言尤其重要。算法库对所有在容器上的操作有个承诺:决不修改容器的大小(不插入、不删除)。有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一承诺,即保持了设原创 2012-10-11 23:00:10 · 8375 阅读 · 0 评论 -
C++中的函数对象(Function Object)(一)
一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子:class FuncObjType{public: void operator() () { cout<<"Hello C++!"<<endl; }};类FuncObjType中重载了“()”操作符,因此对于一个该类的对象FuncO原创 2012-10-09 08:24:32 · 39784 阅读 · 1 评论 -
C++中的函数对象(Function Object)(二)
除了自定义的函数对象,标准库还为我们提供了一系列现成的函数对象, 比如常见的数学、逻辑运算等。例如:negate(),plus(),minus(),multiplies(),divides(),modulus(),equal_to,greater(),less(),logical_not(),logical_and(),等等。 关于函数对象的最后一个很重要的概念是“函数适配器”。函原创 2012-10-10 04:27:59 · 7998 阅读 · 0 评论 -
C++中的异常安全性
一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源;2.不允许破坏数据。 我们先通过两个反面的例子开始。 第一个是造成资源泄漏的例子。一个类Type,内含一个互斥锁成员 Mutex mutex,以及一个成员函数void Func()。假设Func函数的实现如下所示:void Type::Func(){ Lock(&mutex); DoSometh原创 2012-10-08 08:09:23 · 7744 阅读 · 3 评论 -
【D3D11游戏编程】学习笔记二十五:法线映射(Normal Mapping)
(注:【D3D11游戏编程】学习笔记系列由优快云作者BonChoix所写,转载请注明出处:http://blog.youkuaiyun.com/BonChoix,谢谢~) 1. 为什么使用法线映射? 在开始正式讨论法线映射之前,先来看下以下两张图片: 这两张依然是之前一篇文章中用到的仙剑五前传中两张截图,两图中显示的为同一地点原创 2013-03-12 08:13:55 · 22392 阅读 · 27 评论