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 管理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值