记录一个由于GMP参数类型不匹配导致的BUG 记录一个由于GMP参数类型不匹配导致的BUG原因在于一次用GMP的SendObjectMessage时我写了如下代码: 其中SourceActor是一个Actor*类型, Character是一个Character*类型, 代表着 SourceActor把Character的盾击碎。 而在声明这个MessageKey时,由于想到这个MessageKey会被其他两个物体用到,比如炮台A击碎了炮塔B 2023-03-22 UE GMP UE杂记
从C++的POD谈起,到memcpy/memmove的安全性 C++中的POD类型(Plain Old Data)谈起,到memcpy的安全性 最近在写代码时恰巧看了下GMP的源码,发现了里面对委托函数的参数类型规定为指针,引用或是pod,其中pod的判断是std::is_pod,那么什么是POD类型呢? 我们知道C++在一定程度上可以说是C的超集,在C中struct不过是一堆数据的合集,但是在c++中,类的概念出现了,它不仅仅是简单的把 2023-02-26 C++
《EffectiveModernC-》第六章-Lambda表达式 第六章 lambda表达式Item31:避免使用默认捕获模式lambda一大作用就是简化了谓词繁琐的创建 1std::find_if(container.begin(), container.end(),[](int val){ return 0 < val && val < 10; }); 标题提到: 避免使用默认捕获模式,lambda中 2023-02-25 C++ EffectiveModernCPP
《EffectiveModernC-》第五章-移动语义,完美转发 第五章 右值引用,移动语义,完美转发Item 23:理解std::move和std::forward这里是一个C++11的std::move的示例实现。它并不完全满足标准细则,但是它已经非常接近了。 123456789template<typename T> //在std命名空间typename remove_reference&l 2023-02-05 C++ EffectiveModernCPP
《EffectiveModernC++》第四章:智能指针 第四章 智能指针item18:对于独占资源使用std::unique_ptr对于auto_ptr这个C++98的产物,已经被移除了,他的升级版其实就是unique_ptr, auto_ptr的失败是由于缺少移动语义,具体可以看: https://zhuanlan.zhihu.com/p/551883955 这一节这里不过多描述,以前读过很多相关的了,这里基本的不再提起。这里提几个原文中几个有趣的 2022-12-03 C++ EffectiveModernCPP
《EffectiveModernC++》第三章:移步现代C++ 第三章 移步现代C++item7:区别使用()和{}创建对象12345int x(0); //使用小括号初始化int y = 0; //使用"="初始化int z{ 0 }; //使用花括号初始化 在很多情况下,你可以使用”=”和花括号的组合: 1int z = { 0 }; 2022-12-03 C++ EffectiveModernCPP
《EffectiveModernC++》第二章:auto 第二章 autoitem5:优先考虑auto而非显式类型声明12345678template<typename It> //对从b到e的所有元素使用void dwim(It b, It e) //dwim(“do what I mean”)算法{ while (b != e) { typename std: 2022-12-03 C++ EffectiveModernCPP
《EffectiveModernC++》第一章:类型推导 第一章 类型推导item1:理解模板类型推导考虑这样一个函数模板: 12345template<typename T>void f(ParamType param);//调用:f(expr) //从expr中推导T和ParamType 我们可以给T加上一些修饰,如下: 123456template<typename T>void f(const T& param) 2022-12-03 C++ EffectiveModernCPP
C++列表初始化的存在意义 列表初始化的作用列表初始化是初始化行为: 1complex(double r=0,double i=0):re(r),im(i){} 大括号里写叫做赋值行为: 1complex(double r=0,double i=0){re=r;im=i;} 首先要搞清楚他俩并不是等价的。 没有了列表初始化,仅仅依靠大括号很难解决下面几个问题: 在大括号内无法初始化父类 2022-10-16 C++
C++内存管理Part1: new/delete及其重载 C++内存管理Part1: new/delete及其重载内存分配的每一层面这门课不会探讨到O.S. API C++可以分配内存的工具这是一些内存的基础工具 首先是前两个比较基础的: 1234567//CRT,C Runtime Library中的malloc/freevoid* p1 = malloc(512);free(p1);//newcomplex<int>* p2 = ne 2022-09-10 C++ 内存管理