设为首页 加入收藏

TOP

14.6.3 隐藏向量式new和delete
2013-10-07 15:06:27 来源: 作者: 【 】 浏览:71
Tags:14.6.3 隐藏 向量 new delete

14.6.3  隐藏向量式new和delete

一种可能的做法是通过在基类中隐藏向量式new和delete(即operator new[ ]()和operator delete[ ]())来影响其派生类在数组方面表现出来的特征:

  1. class Base  
  2. {  
  3.   std::string  s;  
  4. private:  
  5.   void *operator new [](size_t);  
  6.   void operator delete [](void *);  
  7. };  
  8.  
  9. int main()  
  10. {  
  11.   Base    *pbs  = new Base[5];      // 非法 - 不方便!  
  12.   Derived *pds  = new Derived[5];   // 非法 - 很好!  
  13.   Base    ab[5];                        // 仍然合法 - 很好!  
  14.   Derived ad[5];                        // 仍然合法 - 糟糕!  
  15.   . . .  

隐藏向量式new和delete操作符的做法只能够禁止从堆上分配数组,却无法阻止别人声明派生类实例的基于栈的数组,并将它传递给一个期望父类实例数组的函数。

此外,没有任何手段能够阻止派生类的作者提供公共的(public)可访问的向量式new和delete。因此,这种方案的主要效用是阻止人们创建基于堆的Base数组。由于它并没有能够阻止我们想要避免的东西,所以这种方案简直毫无用处!

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇14.3 dimensionof() 下一篇14.6.2 提供非缺省的构造函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: