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 ...
一周排行
  • 欢迎访问:鲁春利的工作笔记,学习是一种信仰,让时间考验坚持的力量. 大数据环境搭建 hadoop集群搭建 hdfs mapreduce yarn 数据收集框架 flume scribe 集群协调框架 Zookeepe ...
  •   一.默认数据库: counter/_db/db_CC_Counter6.mdb 也可直接打开:http://www.2cto.com /Counter/utilities/update.asp 查看源文件,查找& ...
  • 据GSA(Global Mobile Suppliers Association )统计,目前全球已有83个国家成功部署了张LTE商用网络,拥有超过1.26亿用户和1024款LTE终端.在国内,4G牌照发放在即,日前 ...
  • 10月31日,湖南的"苹果粉丝"迎来激动人心的时刻. 从这一天开始,湖南联通就会在长沙开售iPhone手机,这也是iPhone手机正式进入湖南市场.要知道,iPhone手机刚在美国上市时,很多时髦 ...
  • IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开浏览器,访问新浪 ...
  • Clone Graph Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...
  • OPPO R5手机截图的方法有四种,可能大家并没有注意到怎么使用,下面就对OPPO R5截图方法进行汇总,感兴趣的朋友可以看看哦 近日全球最薄的手机OPPO R5上市,也进行了老旧机型换购的活动.OPPO R5手机截 ...
  • ArcGIS Engine controls are Windows Forms controls. Before developing a Windows Presentation Foundation (WPF) ...
  • vs2012升级update4后,无法运行web站点,修复vs也无效,无奈只有卸载重装. 重装完成后,启动遇到Cannot find one or more components这样的提示,再次修复也无效. 最后搜索 ...
  • 习惯每天都会在Google文档上记一些东西,昨天点了一晚上也打不开,着急,早上到办公室一打开电脑发现依然不行,提示来自docs.google.com的服务器响应时间过长. 还有图片和地图都有问题,但又没给出任何友好提 ...