有一天有个同事在通过vld调试一个内存泄漏问题,折腾了很久然后找到我。我瞥了一眼他的代码,发现问题和我曾经遇到的一模一样: class Base { public: ~Base(); }; class Derived : public Base { privated: std::vector<int> m_data; }; Base *obj = n...
Octopress中的SEO
来自SEO for Octopress Octopress默认为每个页面添加meta description,其内容为当前文章的前150个字符,如果是首页就会是第一篇文章的前150个字符。这里主要通过增加meta keywords来提高SEO。 为每篇文章增加keywors和description 就像我的这篇博客,这下文章头得填很多数据了,有点麻烦: --- layout: pos...
c/c++中几种操作位的方法
参考How do you set, clear and toggle a single bit in C? c/c++中对二进制位的操作包括设置某位为1、清除某位(置为0)、开关某位(toggling a bit)、检查某位是否为1等。这些操作较为常见并且可以作为其他位运算的基础接口,以下罗列几种方法: 传统方法 设置某位为1 number |= 1 << x; ...
c/c++中的-->运算符
参考What is the name of this operator: “–>”? c/c++中以下代码是合法的: #include <stdio.h> int main() { int x = 10; while( x --> 0 ) // x goes to 0 { printf("%d ", x); ...
为什么处理排序的数组要比非排序的快?
参考Why is processing a sorted array faster than an unsorted array? 问题 看以下代码: #include <algorithm> #include <ctime> #include <iostream> int main() { // generate data con...
Null Object模式
Null Object模式用于代替空指针(C++中),以避免上层模块对返回值做空值判定。Null Object模式返回的不是一个空指针,而是一个空对象,上层模块对返回值做操作时,不需要做空判定,而是按正常逻辑调用这个对象的某个接口,只不过对于空对象而言,这个接口什么事也没做,例如: class animal { public: virtual void make_sound() = 0...
MMO聊天服务器设计
MMO中的聊天服务主要功能就是做客户端之间的聊天内容转发。但是聊天的形式有很多,例如私聊、同场景聊、队伍内聊、工会内聊、全服务器聊、甚至临时组建房间聊。这些逻辑功能其实都是可以做在逻辑服务器上的,最多改改世界服务器,但是这样完成功能的话,不免将聊天本身的逻辑与游戏逻辑关联起来。我们希望做得更上一层,将聊天服务本身脱离开来。但是独立聊天服务还不够,因为就算独立出来了,也有可能在实现上与具体的游...
C++11中lambda概览
虽然我对C++11没有什么兴趣,因为C++03就已经有很多复杂的技术了。我曾经试图把我学到的那些复杂的C++技术应用到项目中,但悲剧地发现这给团队其他成员带来了不小的负担。其实也给未来一段时间的自己带来了不小的负担。尤其是template的应用,template代码从外表上就一副唬人的样子,就像即使你会Lisp,并且对Lisp中的括号不以为然,但看到满屏幕的括号时依然内心不安。 但是稍微对...
使用memcmp比较两个变量结果一定吗?
参考Is using memcmp on array of int strictly conforming? 以下代码一定会输出ok吗? #include <stdio.h> #include <string.h> struct S { int array[2]; }; int main () { struct S a = { { 1, 2 } }; ...
Lisp中定义变量*var*和var有什么不同?
参考What’s difference between var and var when using defvar? 其实,Common Lisp中使用defvar定义变量加不加星号没有区别。这只是一种Lisp程序员的约定。Lisp中并不使用特定的符号来影响语法元素,例如Ruby中通过给变量添加@前缀来标示该变量为类成员变量。这个问题引出了lisp总dynamic scope这个话题。 ...