yate学习yateclass.hclass YATE_API RefObject : public GenObject

请声明出处:

对象的引用计数的类,基本大部分的类都继承了该类:

/
 * A reference counted object.
 * 引用计数的对象
 * Whenever using multiple inheritance you should inherit this class virtually.
 * 使用多重继承,一般都会继承这个类
 */
class YATE_API RefObject : public GenObject
{
    YNOCOPY(RefObject); // no automatic copies please
public:
    /
     * The constructor initializes the reference counter to 1!
     * 构造函数,初始化引用计数器为1.
     * Use deref() to destruct the object when safe
     * 使用deref()去销毁这个对象在安全的时候
     */
    RefObject();

    /
     * Destructor.
     */
    virtual ~RefObject();

    /
     * Get a pointer to a derived class given that class name
     * 获取一个指向派生类的指针,因为类名
     * @param name Name of the class we are asking for
     * @参数 name,请求的类名
     * @return Pointer to the requested class or NULL if this object doesn't implement it
     * @返回被请求类的地址,为NULL,如果这个对象没有实例化
     */
    virtual void* getObject(const String& name) const;

    /
     * Check if the object is still referenced and safe to access.
     * 检查对象是否依旧被引用并且安全的访问
     * Note that you should not trust this result unless the object is locked
     * 注意,不能完全相信这个结果,除非对象被其他方法锁定
     *  by other means.
     * @return True if the object is referenced and safe to access
     * @返回True,如果对象被引用并且安全的访问
     */
    virtual bool alive() const;

    /
     * Increments the reference counter if not already zero
     * 增加引用计数器,如果不为0
     * @return True if the object was successfully referenced and is safe to access
     * @返回True,如果对象被引用并且安全的访问
     */
    bool ref();

    /
     * Decrements the reference counter, destroys the object if it reaches zero
     * 减少引用计数器,如果为0则销毁对象
     * <pre>
     * // Deref this object, return quickly if the object was deleted
     * if (deref()) return;
     * </pre>
     * @return True if the object may have been deleted, false if it still exists and is safe to access
     * @返回true,如果对象已经被删除,false,依旧存在并且安全的访问
     */
    bool deref();

    /
     * Get the current value of the reference counter
     * 获取引用计数器当前的值
     * @return The value of the reference counter
     */
    inline int refcount() const
	{ return m_refcount; }

    /
     * Refcounted objects should just have the counter decremented.
     * 引用计数对象减少计数器
     * That will destroy them only when the refcount reaches zero.
     * 当引用计数器为0的时候销毁
     */
    virtual void destruct();

    /
     * Check if reference counter manipulations are efficient on this platform.
     * 检查在这个平台上引用计数器对象是否有效
     * If platform does not support atomic operations a mutex pool is used.
     * 如果该平台不支持原子操作使用互斥对象池
     * @return True if refcount uses atomic integer operations
     * @返回true,如果对象计数使用原子整数操作
     */
    static bool efficientIncDec();

protected:
    /
     * This method is called when the reference count reaches zero after
     * 当该应用计数为0之后调用这个方法
     *  unlocking the mutex if the call to zeroRefsTest() returned true.
     * 如果调用zeroRefsTest() 返回true,解除这个互斥锁
     * The default behaviour is to delete the object.
     * 默认删除这个对象
     */
    virtual void zeroRefs();

    /
     * Bring the object back alive by setting the reference counter to one.
     * Note that it works only if the counter was zero previously
     * @return True if the object was resurrected - its name may be Lazarus ;-)
     */
    bool resurrect();

    /
     * Pre-destruction notification, called just before the object is deleted.
     * Unlike in the destructor it is safe to call virtual methods here.
     * Reimplementing this method allows to perform any object cleanups.
     */
    virtual void destroyed();

private:
    int m_refcount;
    Mutex* m_mutex;
};


更多相关文章
  • 1.若有定义:int a=8,b=5,c:执行语句c=a/b+0.4;后c的值为   A) 1.4             B) 1          C) 2.0        D) 2 2.假定x和y为 double型,则表达式x=2,y=x+3/2的值是      A) 3.500000    ...
  • 对VNXe3200 lun在线的扩容,首先需要明确你的storage pool里面有多余的空间,如果没有多余的空间,那么需要对pool先进行expand,比如说新加磁盘或者将之前没有使用的磁盘加入到pool里面.这里要说的一点是:VNXe3200 划分RAID的时候都是以storage pool形式 ...
  • 前言:上一篇介绍了下多线程的相关知识:C#基础系列——多线程的常见用法详解,里面就提到了委托变量.这篇简单介绍下委托的使用.当然啦,园子里面很多介绍委托的文章都会说道:委托和事件的概念就像一道坎,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里发慌.确实这东西就像最开始学 ...
  • 介绍: 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,1998年已推出正式的RFC2338协议标准.VRRP广泛应用在边缘网络中,它的设计目标是支持特定情况下IP数据流量失败 ...
  • 互联网时代用户对业务体验的要求很高,包括对语音业务.这从某种程度上可以解释相对于全球LTE的建设高潮,VoLTE业务的发展却相对平缓得多.作为第一个真正意义上的电信级IP公共语音业务,VoLTE对运营商的网络提出了很高的要求.相对于一些技术问题,LTE的网络覆盖覆盖问题显得比较突出.从一些已经商用的 ...
  • 文/新喜目前,Google.Microsofte.IBM.HP等跨国科技巨头不约而同的盯上了非洲,两年前,Facebook CEO 扎克伯格联合爱立信.诺基亚.高通等品牌,成立了Internet.org 组织,推出Internet.org 应用,表示要让全世界的穷人都可以上网.目前,facebook ...
一周排行
  • allyesno:我们会遇到很多所谓非法的文件名 例如 .. con nul 等等 FlowerCode 给出了以下方法可以快速删除这些文件名 http://hi.baidu.com/flowercode/blog/ ...
  • 一.忌虚拟光驱 现在多数虚拟光驱在WindowsXP里是不稳定的,容易引起WindowsXP的死机,因为虚拟光驱不同于一般的软件:它通过特殊的机制,在"设备管理器"中骗过Windows,让Wind ...
  • 8080端口被占用怎么办   1.Windows平台   在windows命令行窗口下执行:   C:\>netstat -aonfindstr "80"  TCP     127.0.0. ...
  • 引用是对象的别名,引用并非对象的指针,也不是拷贝,而是对象自己. 函数返回一个引用,意味着该函数调用可以出现在赋值运算符的左边. 连续调用返回引用的函数形成方法链,例如count<<x<<y& ...
  • using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Dra ...
  • VB提示:文件未找到:'c:/windows/sytem32/ieframe.dll/1'的解决方法 这个是由于ie7.0的bug引起的. 把以下内容做成一个注册表文件fixieframe.reg,导入注册表即可: ...
  • 据前NSA合同工Edward Snowden泄露的文件,NSA设计窃取机密文件的恶意程序感染了超过五万个区域网络. 一份日期为2012年的幻灯片显示(如图),NSA在50多个地点使用了Computer Network ...
  • Mysql编译安装   编译安装   www.2cto.com   编译安装之前的准备工作: 添加mysql帐号 # useradd mysql 目的:避免数据库初始化出现问题   安装: [[email protected] bin ...
  • 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. 假设输入的前序遍历和中序遍历结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3, ...
  • using System;using System.Collections.Generic;using System.Collections;using System.Text;using System.IO;usi ...