摘要: C++运算符重载 阅读全文
posted @ 2012-06-29 21:05 carter2000 阅读(1824) 评论(3) 推荐(1) 编辑
摘要: 在c++里面表示空指针 阅读全文
posted @ 2012-06-26 21:27 carter2000 阅读(12149) 评论(6) 推荐(2) 编辑
摘要: 垃圾回收的一些介绍 阅读全文
posted @ 2012-06-24 13:00 carter2000 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 构造函数和析构函数中的虚函数调用不会调用到外层派生类的虚函数。 虚函数表地址在对象的构造和析构过程中会发生变化。 阅读全文
posted @ 2012-04-28 12:57 carter2000 阅读(17577) 评论(2) 推荐(11) 编辑
摘要: 信号量、互斥量和临界区都是用来支持线程同步的工具,它们的作用大体上类似,这里简要描述一下它们在访问范围上的差别。 信号量在整个系统中可以被任意进程的任意线程获取并释放。也就是说,它是可以被跨进程访问的,而且被线程A获取的信号量可以由线程B来释放。也就是说任何进程的线程都可以强行获取一个信号量(获取之前先释放)。 互斥量也是可以在整个系统中被任意进程的任意线程访问到,但它严格限定只有获取了互斥量的线程才能释放该互斥量。也就是使用互斥量可以避免互斥状态被其他线程破坏。但它也存在一个问题,即任何进程的线程一旦获取到互斥量,就有权力一直不去释放它,导致其他进程的线程无法获取到互斥量。 临界区是比... 阅读全文
posted @ 2012-04-23 22:01 carter2000 阅读(772) 评论(0) 推荐(0) 编辑
摘要: OSI定义的通信协议从底向上分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。而TCP/IP协议并不完全符合OSI的七层模型,它由从底向上的四个层次组成:网络接口层、网络层、传输层、应用层。 TCP/IP协议中网络接口层主要用来处理物理接口与电缆之间的硬件细节。网络层处理网络中消息包(IP、ICMP、IGMP)的传输。传输层为两个主机之间(端到端)的应用层提供数据流,主要有TCP和UDP两种协议。应用层则处理具体的应用细节,应用层上的协议有Telnet、FTP、SMTP、SNMP等。 这里想要描述一下从主机A上的应用Aa发一个消息包给主机B上的应用Bb的大致流程。假设... 阅读全文
posted @ 2012-04-22 21:14 carter2000 阅读(731) 评论(1) 推荐(0) 编辑
摘要: 在使用vector的过程中,有时会遇到需要循环遍历vector,并删除符合指定条件的元素。 当“指定条件”不复杂时,应该尽量使用erase(remove_if(begin, end, func), end)的形式来完成功能。 但有时候“指定条件”过于复杂,不得不显式地写一个for循环来处理。我们必须小心在意erase所带来的side effect,一个一般性的for循环如下: 1 for (std::vector<int>::iterator it = intVec.begin(); it != intVec.end(); /**/) 2 { 3 if (*it... 阅读全文
posted @ 2012-04-19 22:12 carter2000 阅读(6812) 评论(0) 推荐(0) 编辑
摘要: 对于尾递归,以前的理解仅局限于它是递归和尾调用的终极合体,比普通递归效率高。至于效率为什么高,高在哪,一直没有深究过,现在补上。要说尾递归,得先说尾调用。我理解的尾调用大概是这么一种情况:函数A里面调用了函数B。函数B执行后,函数A马上返回。也就是说调用函数B(并返回执行结果)是函数A所做的最后一件事。相当于执行完函数B后,函数A也就执行完。因此在执行函数B时,函数A的栈帧其实是已经大部分没用了,可以被修改或覆盖。编译器可以利用这一点进行优化,函数B执行后直接返回到函数A的调用者。这里有一点需要注意:它是来自于编译器的优化。这一点点的优化对于普通的尾调用来说可能意义不大,但是对于尾递归来说就很 阅读全文
posted @ 2012-04-19 22:00 carter2000 阅读(1539) 评论(5) 推荐(1) 编辑