编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配

编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配

2015-08-07 07:34:12 CSDN- fycy2010- 点击数:17
id="iframeu848856_0" src="http://pos.baidu.com/ecsm?rdid=848856&dc=2&di=u848856&dri=0&dis=0&dai=2&ps=268x275&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1458977100809&ti=%E7%BC%96%E5%86%99C%2B%2B%E4%B8%AD%E7%9A%84%E4%B8%A4%E4%B8%AA%E7%B1%BB%20%E4%B8%80%E4%B8%AA%E5%8F%AA%E8%83%BD%E5%9C%A8%E6%A0%88%E4%B8%AD%E5%88%86%E9%85%8D%E7%A9%BA%E9%97%B4%20%E4%B8%80%E4%B8%AA%E5%8F%AA%E8%83%BD%E5%9C%A8%E5%A0%86%E4%B8%AD%E5%88%86%E9%85%8D-C%2B%2B-%E7%AC%AC%E4%B8%83%E5%9F%8E%E5%B8%82&ari=1&dbv=2&drs=1&pcs=1430x920&pss=1430x269&cfv=17&cpl=6&chi=1&cce=true&cec=UTF-8&tlm=1458977100&ltu=http%3A%2F%2Fwww.th7.cn%2FProgram%2Fcp%2F201508%2F522368.shtml&ltr=http%3A%2F%2Fcn.bing.com%2Fsearch%3Fq%3D%25E4%25BD%25BF%25E4%25B8%2580%25E4%25B8%25AA%25E7%25B1%25BB%25E7%259A%2584%25E5%25AE%259E%25E4%25BE%258B%2B%25E5%258F%25AA%25E8%2583%25BD%25E5%259C%25A8%25E5%25A0%2586%25E4%25B8%25AD%25E5%2588%2586%25E9%2585%258D%25E5%2586%2585%25E5%25AD%2598%2B%25E4%25B8%258D%25E8%2583%25BD%25E5%259C%25A8%25E6%25A0%2588%25E4%25B8%25AD%25E5%2588%2586%25E9%2585%258D%25E5%2586%2585%25E5%25AD%2598%26go%3DSubmit%26qs%3Dn%26form%3DQBLH%26pq%3D%25E4%25BD%25BF%25E4%25B8%2580%25E4%25B8%25AA%25E7%25B1%25BB%25E7%259A%2584%25E5%25AE%259E%25E4%25BE%258B%2B%25E5%258F%25AA%25E8%2583%25BD%25E5%259C%25A8%25E5%25A0%2586%25E4%25B8%25AD%25E5%2588%2586%25E9%2585%258D%25E5%2586%2585%25E5%25AD%2598%2B%25E4%25B8%258D%25E8%2583%25BD%25E5%259C%25A8%25E6%25A0%2588%25E4%25B8%25AD%25E5%2588%2586%25E9%2585%258D%25E5%2586%2585%25E5%25AD%2598%26sc%3D0-0%26sp%3D-1%26sk%3D%26cvid%3D6EA44C28CA9B4D909AE1FB5551502CFC&ecd=1&psr=1920x1080&par=1920x1019&pis=-1x-1&ccd=24&cja=true&cmi=8&col=en-US&cdo=-1&tcn=1458977101&qn=9ac2bda4d15895db&tt=1458977100771.122.175.176" width="336" height="280" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
  1. #include<iostream>  
  2. using namespace std;  
  3. //只能在堆上分配内存  
  4. class HeapOnly  
  5. {  
  6. public:  
  7.     HeapOnly()  
  8.     {  
  9.         cout<<"Construct."<<endl;  
  10.     }  
  11.     //pseudo dtor,注意为const,因为const也可能需要被销毁
  12.     void destory()  const
  13.     {  
  14.         delete this;  
  15.     }  
  16. //声明为private也是可以的,但阻碍了继承,并且即便声明为protected还是不能把它包含于对象,而使能用一个它的指针替代它  
  17. protected:  
  18.     ~HeapOnly()  //客户定义HeapOnly h;时由于稍后要调用dctor,不合法  
  19.     {  
  20.   
  21.     }  
  22. };  
  23.   
  24. //只能在栈上分配空间  
  25. class StackOnly  
  26. {  
  27. public:  
  28.     StackOnly()  
  29.     {  
  30.   
  31.     }  
  32.     ~StackOnly()  
  33.     {  
  34.   
  35.     }  
  36.   
  37. private:     
  38.     //将new操作符私有化,在外面无法调用,因为new表达式总是调用operator new,声明为static,只为类服务,不为具体对象服务
  39.     //注意还得把将delete与new置于同一访问层次,并且针对数组的new delete也最好一并定义为private
  40.     static void* operator new(size_t size);   
  41.     static void operator delete(void *ptr);  
  42.     static void* operator new[] (size_t size); 
  43.     static void operator delete[] (void *ptr);  
  44. };  
  45.   
  46.   
  47. int main()  
  48. {  
  49.     HeapOnly *hO=new HeapOnly();  
  50.   
  51.     hO->destory();  
  52.   
  53.     //HeapOnly he; //编译错误:HeapOnly::~HeapOnly”: 无法访问 private 成员(在“HeapOnly”类中声明),所以不能通过栈来分配这个对象的空间  
  54.   
  55.     StackOnly so;  
  56.   
  57.     //StackOnly *st=new StackOnly();  //StackOnly::operator new”: 无法访问 private 成员(在“StackOnly”类中声明)  

  1. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值