zoukankan      html  css  js  c++  java
  • 私有析构函数 Android 代码分析

    有人说声明 Private Destructor, 这对象只能在 stack 上创建,不能在Heap上创建, 其实错了, 这样的程序编译都过不了.

    那为何会有 Private Destructor, 因为程序是这样写的

    ------------------------------------
    class Base {
    public:
        Base();
    protected:
        virtual ~Base();
        friend class Base_Friend;
    };

    ------------------------------------
    class Child : public Base{
    public:
        Child();
    private:
        virtual ~Child();
    };

    如此可以达到2个目的
    1) 只能通过 delete base  才能调用 Child的Destructor
    2) Child 不能再有 子类了


    看看Android 的  Refbase 和 Overlay 的关系 

    class Overlay : public virtual RefBase
    {
    ...
    private:
        virtual ~Overlay();
    }

    class RefBase
    {
        public decStrong();
    ...
    protected:
                                RefBase();
        virtual                ~RefBase();

       
    }

    注意到 ~RefBase(); 是 protected, 那个如何 delete RefBase 呢?  原来它提供 decStrong() 方法, 要删除对象只有通过这个方法了
    void RefBase::decStrong(const void* id) const
    {
           ....
           delete this;
           ....
    }

    RefBase 是提供给 wp<T> 和 sp<T> 使用的, 这种方法说明了RefBase不希望外部程序才进行对象new delete 管理

  • 相关阅读:
    MYSQL查询表信息
    认识WCF
    asp.net mvc 模型验证注解,表单提交
    asp.net mvc 防止开放重定向
    asp.net webForm登录授权
    C# 压缩文件与字节互转
    C#将字节流加密解密
    获取数据库表详细信息、存储过程、视图、的sql
    Mvc4学习笔记一(Ajax.ActionLink)
    java开发之提高java和mysql代码性能和质量
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3198927.html
Copyright © 2011-2022 走看看