博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
私有析构函数 Android 代码分析
阅读量:7018 次
发布时间:2019-06-28

本文共 842 字,大约阅读时间需要 2 分钟。

有人说声明 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 管理

转载地址:http://rszxl.baihongyu.com/

你可能感兴趣的文章
【PMP】Head First PMP 学习笔记 第八章 质量管理
查看>>
使用 Sketch 和 Pixate 构建 Material Design 原型 - 第三部分
查看>>
.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)
查看>>
人工智能将有效帮助数据中心降低运营成本
查看>>
5G NR标准制定加速 将对运营商计划产生重大影响
查看>>
关于iOS的后台下载和断点续传,说一说自己的理解(二,接上篇)
查看>>
模板类中使用iterator成员出错的解决办法
查看>>
iOS中 UIProgressView 技术分享
查看>>
DataStax公司CEO谈大数据和云计算
查看>>
一个通过BackgroundWorker实现WinForm异步操作的例子
查看>>
社交图谱分析:激发大数据时代新活力
查看>>
位操作相关宏与函数
查看>>
第三代身份证原来是这样的 安全最大化不是梦想!
查看>>
linux 计划任务
查看>>
使用POI实现报表打印功能
查看>>
英国电信 云计算还不成熟
查看>>
运行于显卡(GPU)的Rootkit木马和键盘记录器问世
查看>>
三星推出高容量、企业级绿色SSD
查看>>
PHP/如何在Linux服务器中隐藏PHP版本
查看>>
高速加密:IBM发布更猛更快的z14大型机
查看>>