您的位置:首页 > 其它

只能在堆上分配空间的类和只能在栈上分配空间的类

2013-12-09 09:00 197 查看


#include   <iostream> 

  using   namespace   std; 

  

  class   HeapOnly 

  { 

  public: 

  HeapOnly()   {   cout   <<   "constructor."   <<   endl;   } 

  void   destroy   ()   const   {   delete   this;   } 

  private: 

  ~HeapOnly()   {}   

  }; 

  

  int   main() 

  { 

  HeapOnly   *p   =   new   HeapOnly; 

  p->destroy(); 

  // HeapOnly   h; 

  // h.Output(); 

  

  return   0; 

  } 

  //StackOnly.cpp 

  //2005.07.18------2009.06.05 

  #include   <iostream> 

  using   namespace   std; 

  

  class   StackOnly 

  { 

  public: 

  StackOnly()   {   cout   <<   "constructor."   <<   endl;   } 

  ~StackOnly()   {   cout   <<   "destructor."   <<   endl;   } 

  private: 

  void*   operator   new   (size_t); 

  }; 

  

  int   main() 

  { 

  StackOnly   s;                                                             //okay 

  StackOnly   *p   =   new   StackOnly;                           //wrong 

  

  return   0; 

  }

其实道理很简单,前者利用了c++的重载机制+访问控制机制。后者利用了c++的访问控制机制。

前者重载了new运算符,并设为私有,因此,当用 new stackonly;时编译器就会报错。

后者则将构造函数设为私有,因此,当你 heaponly h;时会自动调用构造函数,这时编译器也会报错。

这种技巧在c++中是很常用的比如设计模式中的单件模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐