martin

thinking

常用链接

统计

software

最新评论

re: 学好c++50条[未登录] martin_yahoo 2009-03-20 14:16
说的不错.
re: 应用系统中的定时器设计 martin_yahoo 2009-03-18 15:45
因为该代码实例是从Drawin,ICE等应用中摘要而出,但这些系统可能为了系统的需要,进行了一些比较复杂的设计.其实你只要在意原理就行,也就是仅这一段即可:
上面所介绍的,主要是些数据结构. 定时器设计的关键部分如下: ....
re: 智能指针的代码实例[未登录] martin_yahoo 2009-03-09 18:01
u r right. These souce code is abstracted from ICE.
re: C++中的智能指针[未登录] martin_yahoo 2009-03-09 16:19
@abettor
你可以参阅:
智能指针的代码实例
re: C++中的智能指针[未登录] martin_yahoo 2009-03-09 15:14
@陈梓瀚(vczh)
class T; //双向链表的节点类
class T_var;  //为指向对象T的智能指针类.
class T_list; //双向链表数据结构类
假设class T为双向链表上的节点,故它的定义可以简单地用如下方式表示:

calss T{
....
private:
T_var beforePtr;
T_var nextPtr;
};

现在考虑三个节点:N ,N1,N2节点.
N节点的nextPtr指向N1, beforePtr指向其它节点
(如果N节点前面没有其它节点,此时只有N1节点引用它,则它的引用计数为1;如果前面还有还有其它节点,则它的引用计数为2).

N1节点的nextPtr指向N2, beforePtr指向N节点.
(N1节点的引用计数为2).

N2节点的nextPtr指向其它节点, beforePtr指向N1节点.
(如果N节点后面没有其它节点,此时只有N1节点引用它,则它的引用计数为1;如果后面还有还有其它节点,则它的引用计数为2).

现在假设要删除N1节点, 把N2节点中的beforePtr指向N,
则N节点的引用计数增加一,N1节点的引用计数减少1,变成1.
把N节点的nextPtr指向N2节点,则N2的引用计数增加一,N1节点的引用计数减少1,从而N1节点的引用计数被降到0,N1节点将被自动摧毁.

此时,N,N2节点的引用计数将各自减一.维持与N节点存在是一致.这种情况下没完蛋.

考虑到在类T_list中包含有双向链表的首,尾地址.因此在一般情况下,各节点的引用计数都为2.

因此,对于首,尾节点的操作与N1节点一致.
m_lock 中含有一些成员不能更改,故采用了const修饰,对于加琐和释放部分利用mutable修饰.
@Matrixcoding
至于异常处理,那就根据业务的需要进行异常处理就可以了.
至于const引用,就是避免在应用中对Guard中的成员m_lock进行更改.如果可以进行更改,则可能应用中多个线程要对同一资源加锁,可以更改后,可能处理的不是同一个锁,从而不能对资源进行有效地保护.
re: C/C++混合编程[未登录] martin_yahoo 2009-03-05 23:20
@cdy20
只不过是在c头文件中已经加上了如下类似的语句:
#ifdef _c_plus_plus
extern "C"{
#endif
.....
#ifdef _c_plus_plus
}
#endif

如果在c语言的头文件中加上述语句, 就应象采用随笔中提到的做法.
re: C++的一些基础知识[未登录] martin_yahoo 2009-03-05 22:00
@Sandy
第一种情况
class B : private A
{
....
};
B 从A私有继承.
第二种情况:
class B{
...
private:
A a;
...
};
B含有一个A对象为实例,并且为B的私有成员.
@S.l.e!ep.¢%

如果程序在m_lock.acquire()处锁失败,则应用在此hang住,直到其他线程释放资源,并被该线程获取为止.此时这个线程会把资源所定.