自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李永亮的专栏

设计改变中国!

  • 博客(18)
  • 收藏
  • 关注

原创 Effective C++之13

条款13:以对象管理资源使用RAII对象对待资源是比较好的选择。使用对象在资源管理上能起到很好的效果,auto_ptr是我经常使用的,但也有其他智能指针或者自行编写的类实现类似功能,这样可以避免资源的泄漏。 

2006-11-27 10:27:00 672

原创 Effective C++之12

条款12:复制对象时勿忘其每一个成分       编译器是小气的,它提供了默认的拷贝构造函数和拷贝操作符,这都是基于位拷贝。但是如果执意不用这些默认的函数,那么编译器往往不会很仔细的检查自己实现的函数的逻辑错误。       一般来说,问题主要有两点,遗漏成员没有拷贝或者没有拷贝基类成员。这是需要注意的地方。另外,对拷贝的共有代码(往往是冗长的),建议放在一个新的私有函数中,由拷贝构造函数

2006-11-24 10:16:00 633

原创 Effective C++之11

条款11:在operator=中处理自我赋值       我感受很深的是在实现string的operator=的时候,如下:String{String& operator=(const String& str{       if(&str == this)              return *this;)}       这是个办法,当然还有其它办法,例

2006-11-23 09:38:00 839

原创 对TCP上的SIP实现理解

       首先作为UAC和UAS和作为Proxy的概念上是不同的。那么那UAC来说,UAC需要主动连接UAS,即UAC通讯层打开一个连接。TCP使用长连接,并且不同事务共享这些连接。        UAC发送请求到UAS,UAS进行匹配处理;UAS处理完毕发送应答。理论上,UAS应该在通常的连接上发送应答,如果连接不存在,服务端需要创建一个连接来发送应答。如果存在”rec

2006-11-22 18:46:00 3796

原创 Effective C++之10

条款10:令operator=返回一个reference to *this       赋值采用右结合率,也就是说a=b=10;means a= (b= 10)。所以赋值需要遵循如下规范:class A{A& operator=(const A&){…return *this;}}同样的情况适用于operator+=等情况。 

2006-11-22 14:28:00 720

原创 Effective C++之9

条款09:绝不在构造和析构过程中调用virtual函数       从概念上来说,这很容易理解,只要知道virtual函数的实现原理就可以了。在构造和析构过程中,无法确定对象的虚函数表是否处于正常状态,所以可能调用会产生一些不良后果,比如调用了基类函数,甚至是pure virtual函数,导致不可预知的后果。 

2006-11-22 11:51:00 659

原创 Effective C++之8

条款08:别让异常逃离析构函数为什么不让析构函数中逃出异常?这还是有点讲究的。首先,异常很重要的作用是在异常跳到上一层函数时会自动清空函数的栈,栈的清除很重要的一步是析构工作,如果这时候又出现一个异常怎么办?我想应该直接abort()了,所以这就有违异常捕获的初衷。所以析构函数中如果出现异常,就应该捕获,然后吞掉他。 

2006-11-22 11:39:00 617

原创 NMS CAS OPS0应答问题

      今天遇到一个NMS CAS OPS0的问题,OPS0在应答后5秒才能接通。通过agtrace 0x3073抓到OAMMON日志,通过perl脚本解析OAMMON的日志,发现问题是在于ADI OPS中默认的应答ring是1。所以需要修改两个参数:NCC.X.ADI_OPS.ringstoincoming = 0, and NCC.X.ADI_OPS.CIDsupport = 0。修改

2006-11-21 16:46:00 919

原创 Effective C++之7

条款07:为多态基类声明virtual析构函数       为什么?一个C++基本问题,或者说面向对象编程的基本问题。构造函数的调用是由基类到派生类,析构函数的顺序正好相反。所以对多态对象的析构是需要考虑的地方。也就是说,如果是多态基类就需要虚析构函数,否则完全没有必要。 

2006-11-21 16:19:00 606

原创 Effective C++之6

条款06:若不想使用编译器自动生成的函数,就应该明确拒绝       有时候编译器会自动认可一些行为,也许这些行为不为你所接受,然而忽略很很容易理解的,比如对象拷贝。       我目前常常使用的办法是只声明不实现,这里给出了一个新的办法:Class Uncopyable{protected:       Uncopyable(){}~Uncopyable(){}p

2006-11-16 17:30:00 590

原创 Effective C++之5

条款05:了解C++默默编写并调用了哪些函数编译器会默默编写并调用的函数有默认构造函数、拷贝构造函数、拷贝赋制操作符和析构函数。温故而知新的部分有:如果存在构造函数了,编译器不会生成默认构造函数。编译器的拷贝是简单的位拷贝,如果有复杂的拷贝操作,比如引用的拷贝,指望编译器是不现实的。 

2006-11-16 13:46:00 626

原创 Effective C++之4

条款04:确定对象在使用前已先被初始化       其实先前写的很多Blog都在描述这个问题。但这个问题的危害性常常被忽视。因为引起错误的可能性不大,但往往一旦出现错误就极为隐蔽,很难发现。       那么Scott说了些什么?第一、C++不保证对内置对象的初始化。第二、C++提供了初始化列表,善于利用。第三、用local static对象取代non-local static

2006-11-15 16:27:00 607

原创 Effective C++之3

条款03:尽可能使用const       对const的喜爱始于编译器对const的偏爱,也许你并不知道,在私底下,编译器针对const可以做很多优化,这都是non-const不曾有过的特权。所以将对象的const化,有时候能够带来性能上的优化。       const的本意是一种约束,能减少因为不小心的带来的“键盘”误。对于编译器来说,const意味着bitwise constness

2006-11-15 14:37:00 523

原创 Effective C++之2

条款02:尽量以const,enum,inline替换#define       宏的毁灭性作用就不用多说了,就有点像矩阵中的尼奥,不能够被控制。编译器对宏毫无办法。宏只是单纯的代码替换,毫无智能性可言。当然不能否认可以使用宏做很多事情,比如查找内存泄漏,但是就像一把锋利的双刃剑,能尽量避免使用。       所以有两种选择替换:如果类似于定义变量可以使用const或者enum;如果类

2006-11-14 18:19:00 588

原创 ACE_Message_Queue的异常

今天在使用ACE_Message_Queue的时候出现了异常,当时在Queue里面,获取一个ACE_Message_Block的时候,出现异常。最初以为是在将ACE_Message_Block加到队列中出现的问题,但跟了一下不是;又以为ACE_Message_Block本身出了问题,检查了一下也不是。就很郁闷了,到底是怎么了?后来才发现问题的所在,问题是ACE_Message_Block还

2006-11-14 17:31:00 914

原创 Effective C++之1

条款01:视C++为一个语言联邦C++可以看成四种次语言组成的联合政府;1.C2.Object-oriented C++3.Template C++4.STL所以C++的规则不是一元的。 

2006-11-14 15:11:00 563

原创 离散数学,心中的痛

离散数学一直没有能学好,这真是心中很难受的事情。今天写了一点简单的程序,居然没有能够一气呵成,比较丢脸。enumTEST_STATE{       TEST_STATE_NORMAL=0x0,       TEST_STATE_LOCALBLOCK=0x1,       TEST_STATE_REMOTEBLOCK=0x2,       TEST_STATE_BOTHBLO

2006-11-07 18:03:00 885

原创 常识性逻辑错误

常识是世界上最可怕的事情,在莱特兄弟之前,常识是人类是不能飞的,因为人类的密度大于空气的密度。今天遇到一个问题就是常识性错误:int nRet = SendMessage(pBlock);if(nRet ==0){       nRet = pEvent->wait(&waittime);if(nRet>0){//未超时}else{//超时}

2006-11-07 15:23:00 1074

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除