摘要: <异常> 条款9:利用destructors避免泄露资源 在函数中,可以将资源封装在局部对象中,通常便可以在exceptions出现时避免泄露资源。是因为局部对象总是会在函数结束时被析构,不论函数如何结束,但唯一例外的就是调用longjmp而结束。 条款10:在constructors内阻止资源泄露(resource leak) C++只会析构已构造完成的对象。对象只有在其constructor执行完毕才算是完全构造妥当。 面对尚未完全构造好的对象,为什么C++拒绝调用其析构函数?是因为若析构函数被调用于一个尚未完全的构造好的对象身上,那么这个析构函数如何知道构造函数现在构造了那些 阅读全文
posted @ 2013-04-06 20:55 life91 阅读(298) 评论(0) 推荐(0) 编辑
摘要: <基础议题> pointer和reference在继承机制下存在两种型别:静态型别是指其声明时的型别;动态型别是指它们实际所指的对象来决定。 条款1:仔细区分pointer和references 没有null references,一个reference必须总是代表某个对象。 使用reference之前不需测试其有效性。若使用pointer,通常就是测试它是否为null。 pointers和references的差异:pointers可以被重新赋值,指向另一个对象;reference却总是指向(代表)它最初获得的那个对象,即使被重新赋值改变的也是原对象的值。 operator[]返 阅读全文
posted @ 2013-04-06 15:49 life91 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 对每个TCP连接,TCP管理4个不同的定时器:重传定时器使用与当希望收到另一端的确认。如果当定时器溢出时还没有收到确认,TCP连接将重传该数据;坚持定时器是窗口大小信息保持不断流动,即使另一端关闭了其接收窗口;保活定时器可检测一个空闲连接的另一端何时崩溃或重启;2 MSL定时器测量一个连接处于TIME_WAIT状态的时间。 TCP的超时与重传 TCP超时与重传中对重要的部分就是对一个给定连接的往返时间(RTT)的测量,通过RTT的变化来改变其超时时间。 拥塞避免算法和慢启动算法是两个目的不同、独立的算法。但是当拥塞发生时,希望降低分组进入网络的传输速率,于是可以调用慢启动来做到这一... 阅读全文
posted @ 2013-04-06 11:11 life91 阅读(366) 评论(0) 推荐(0) 编辑
摘要: TCP的交互数据流 服务器端回显客户端输入的字符过程如图1所示,在回显过程中产生4个报文段:来自客户的交互按键;来自服务器的按键确认;来自服务器的按键回显;来自客户的按键回显确认。图1 一种可能的处理远程交互按键回显的方法 时延确认:通常TCP在接收到数据时并不立即发送ACK;相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送(有时称这种现象为数据捎带ACK)。绝大多数采用的时延是200 ms。 Nagle算法:该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,TCP收集这些少量数据的分组,并在确认到来时以一个... 阅读全文
posted @ 2013-04-06 10:04 life91 阅读(492) 评论(0) 推荐(0) 编辑
摘要: TCP是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间家里一条连接。为了建立一条TCP连接(如图1所示):请求段(客户端)发送一条SYN段指明客户打算连接服务器的端口,以及初始序号(即ISN)。这个SYN端为报文段1;服务器端发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段的确认。一个SYN将占用一个序号;客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认。 发送第一个SYN的一端将执行主动打开(action open),接收这个SYN并发回下一个SYN的一端执行被动打开(pas... 阅读全文
posted @ 2013-04-06 09:23 life91 阅读(401) 评论(0) 推荐(0) 编辑