
c++
Captain_MXD
这个作者很懒,什么都没留下…
展开
-
C++中两个类相互包含引用的问题
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型class A{ int i; B b;}class B{ int i; A* a;}请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即如下的样子:class A{转载 2017-10-24 09:41:26 · 388 阅读 · 0 评论 -
Lua和C++交互api学习
lua_setfield(L, -2, "mxd"); void lua_setfield (lua_State *L, int index, const char *k)操作: arr = Stack[index] //index是表在栈中的索引 arr[k] = Stack.top() //给表赋值转载 2017-09-12 16:14:49 · 364 阅读 · 0 评论 -
Lua和C++交互
转自:http://cn.cocos2d-x.org/tutorial/show?id=1474一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈转载 2017-09-12 14:54:16 · 342 阅读 · 0 评论 -
Lua笔记-关于lua table的C API
//Lua笔记-关于lua table的C API //转载请注明来自yuliying的优快云博客. //Lua版本5.2 /*相关API: ====lua_createtable 原型: void lua_createtable (lua_State *L, int narr, int nrec); 描述: 创建一个新的table并将之放在栈顶.narr是该table转载 2017-09-12 14:50:56 · 456 阅读 · 0 评论 -
Linux(C/C++)下的文件操作open、fopen与freopen
open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲。linxu下的fopen是open的封装函数,fopen最终还是要调用底层的系统调用open。所以在linux下如果需要对设备进行明确的控制,那最好使用底层系统调用(open),open对应的文件操作有:close, read, write,ioctl 等。f转载 2017-09-11 14:30:36 · 381 阅读 · 0 评论 -
模板的继承
模板类的继承包括四种:1.(普通类继承模板类)[cpp] view plain copy templateclass T> class TBase{ T data; …… }; class Derived:public TBaseint>{ …… }; 2.(模板类继承了普通类(非常常见))[cpp] vi转载 2017-09-01 10:38:15 · 376 阅读 · 0 评论 -
MemoryPool —— 简单高效的内存池 allocator 实现
什么是内存池?什么是 C++ 的 allocator? 内存池简单说,是为了减少频繁使用 malloc/free new/delete 等系统调用而造成的性能损耗而设计的。当我们的程序需要频繁地申请和释放内存时,频繁地使用内存管理的系统调用可能会造成性能的瓶颈,嗯,是可能,毕竟操作系统的设计也不是盖的(麻麻说把话说太满会被打脸的(⊙v⊙))。内存池的思想是申请较大的一块内存(不够时继续转载 2017-08-22 21:13:08 · 4711 阅读 · 1 评论 -
指针学习
本来以为对指针已经有所了解了 工作中遇到以下代码,瞬间懵了,请看。static inline void * SLL_Next(void *t) { return*(reinterpret_cast(t));}static inline void SLL_SetNext(void *t, void*n) { *(reinterpret_cast(t)原创 2017-08-15 18:02:15 · 531 阅读 · 0 评论 -
变长数组
之前遇到过这个,当时好像也是明白了,但过后就有点忘记了,或者说思路不清,今天有空写了个博客。 考虑以下情况,我们想声明一个结构体SMsg,这个结构体有以下成员。1. msgid ,int型 用来表示这个结构体的id2. buffsize unsigned int 类型,表示这个结构体的缓冲区大小3. buff, 结构体的缓冲区,额,这个声明成什么类型呢???原创 2017-05-19 19:35:34 · 1189 阅读 · 0 评论 -
c++虚函数
#includeusing namespace std;class C{ public: void funcA(){ cout funcB(); } virtual void funcB()=0; };class B : public C{原创 2017-05-16 14:45:05 · 407 阅读 · 0 评论 -
简单工厂模式
#includeusing namespace std;/* 简单工厂模式: 简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。 三种角色: 1.工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用, 创建所需要的产品对象。 2.抽象(Product)产品角色:原创 2017-03-27 10:51:04 · 409 阅读 · 0 评论 -
c/c++中的宏的用法
言归正传,在C语言中宏定义是比较有用的技巧,在Linux源码中经常使用一些宏定义,比如宏container_of()等都是经典的宏定义表示方式。在C++不再主张使用宏定义,但是宏定义实际上却是是一个非常有用的手段。实质上宏定义能够搞定的实现采用其它的实现也是可以的,宏定义的作用是简单的替代作用,掌握这个是理解的关键,以前在没有代码阅读量的时候总是以为宏定义就是简单的定义一些常量什么的,实质上不然,转载 2017-03-14 19:54:21 · 692 阅读 · 0 评论 -
c/c++中define中的用法
(一)、普通用法 #define PI 3.1415926#define A(x) ((x)*(x)) 这里的括号必不可少(二)、define的单行定义 ## 表示连接 #@ 表示加单引号 #x表示加双引号 1#defineConn(x,y) x##y //表示x连接y,举例说:int n=Conn(123,456); 结果就是n=123456转载 2017-02-14 15:27:39 · 917 阅读 · 0 评论 -
c++函数中的static
如果在一个函数中声明并初始化一个变量后,再次调用时,并不会再次初始化void func(){ static int b = 0; if (b == 0){ cout } else{ cout } b++;}连续两次调用func(); 输出的是不同的结果一次b是0,原创 2017-02-16 16:15:55 · 751 阅读 · 0 评论 -
libevent学习笔记【使用篇】——DNS域名解析 evdns
Libevent 提供了一些用于解析DNS域名的API, 以及一些用于实现DNS Server的接口。可移植的阻塞型域名解析Libevent 提供了标准库函数getaddrinfo的可移植版本,用于让阻塞性域名解析应用于可移植程序。(毕竟有些平台并不支持getaddrinfo函数,或者该函数相对于libevent的替代接口表现更差)。struct evutil_addrinfo { int...转载 2018-03-12 12:30:54 · 918 阅读 · 0 评论