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

更多相关文章

  1. Android学习笔记(二)——Android的数据存储(一)SharedPreferences
  2. 3月22日学习记录(2)(显式intent与隐式intent的区别)
  3. Linux平台下搭建OgreKit on Android开发环境
  4. 解决通过Intent调用系统拍照程序,返回图片太小的问题[android]
  5. Android(安卓)Market软件月增长率高达70%
  6. 关于android中postDelayed方法的讲解
  7. 关于Android(安卓)Studio v0.1在Win 7下安装好后不能运行的解决
  8. android 使用AndroidAnnotations注解简化安卓开发
  9. Android(安卓)Wear开发 - 数据通讯 - 第一节 : 连接数据层

随机推荐

  1. android文件存取
  2. android EditText 监听复制粘贴等操作
  3. Android之Style
  4. Android——通过电话号码获得联系人图像
  5. How to construct a Android(安卓)projec
  6. Android(安卓)R
  7. 模仿Android(安卓)location provider
  8. 杂记
  9. Android(安卓)定时到服务器取数据并刷新
  10. Android日常应用记录