当前位置:首页 > 资讯 > info6 > 正文

游戏引擎与C++

发表于: 2017-03-22   作者:caozhankui   来源:转载   浏览:
摘要: 游戏引擎与C++参考CppCon2016:JasonJurecka“GameengineusingSTDC++11"此presentation主要关注C++11在游戏引擎中的使用游戏引擎的特点不会使用太多STD游戏的历史很久远,且对内存、cpu的使用很苛刻比如对于std::string,操作比较慢,因此更多采用cstring比如std中的模板会造成代码体积膨胀游戏引擎不会使用太多异常会关掉第三方库

游戏引擎与C++

  • 参考CppCon 2016: Jason Jurecka “Game engine using STD C++ 11"
  • 此presentation主要关注C++11在游戏引擎中的使用

游戏引擎的特点

  • 不会使用太多STD

    • 游戏的历史很久远,且对内存、cpu的使用很苛刻
    • 比如对于std::string,操作比较慢,因此更多采用cstring
    • 比如std中的模板会造成代码体积膨胀
  • 游戏引擎不会使用太多异常

    • 会关掉第三方库的exception
  • 游戏引擎不会太正规的做fix,比较随意

游戏引擎中C++11的使用

  • constexpr做编译期资源版本管理
  • static_assert做编译期类型验证
  • unique_ptr做RAII,取代auto_ptr
    • auto_ptr有拷贝语义,拷贝后源对象变得无效;unique_ptr则无拷贝语义,但提供了移动语义
    • auto_ptr不可作为容器元素,unique_ptr可以作为容器元素
  • move语义加速了标准容器的数据拷贝
  • 算法库对于raw array也适用
  • ref CppCon 2016: Jason Jurecka “Game engine using STD C++ 11"
  • 演讲者把自己比作一把瑞士军刀,什么都能做,但是不精通,如图形渲染、数据加载和解析、游戏AI
  • std::async
  • pure:用于声明纯虚函数

参考

C++11的智能指针

  • 四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用
  • auto_ptr

    • c++98中实现
    • 赋值时p1 = p2,则p2会变成空指针,赋值其实是把p2的成员变量指针赋值给p1,并对p2调用release()
    • release()的作用是释放原指针,成员变量指针置为0,并返回源指针,不会释放资源
    • reset()的作用是成员变量指针置为0,并释放资源
    • 判断为空要使用p.get() == NULL
    • 不能放到容器中,因为容器的赋值传递会使容器中元素置位空,参考说法:
      • 容器内元素的类型约束为元素类型必须支持赋值运算(引用不支持赋值,所以引用类型不能被放入容器),元素类型的对象必须可以复制(IO库类型不支持复制或赋值,所以IO类型对象不能放入容器),对于auto_ptr这种类型来说,它的赋值和复制已不是传统意义上的概念,所以放入容器中会出现很多未定义的后果。同样在作为函数入参时,除非用const & 进行修饰,否则也会出现未定义操作。
  • unique_ptr

    • 用于取代auto_ptr,添加了move语义,并支持自定义deleter
    • 相比auto_ptr,不支持赋值和复制,但支持带有move的赋值和复制,可以使用p == NULL判断是否为空
  • shared_ptr

    • 用于共享资源
  • weak_ptr

    • 用来监视shared_ptr,解决shared_ptr相互引用时的死锁问题

作者Focustc,来自于 CSDN

游戏引擎与C++

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号