只能在栈上或者堆上创建对象

http://blog.csdn.net/acdnjjjdjkdckjj/archive/2010/05/29/5633611.aspx

<转者注>

c++给程序员极大的自由,上可面向对象,下可添入汇编代码.

不满意其内存管理么,可以自己写。这就是c++的魅力。

</转者注>

 

只能在栈上或者堆上创建对象

C++中存放变量的地方有三个,分别是全局/静态变量存储区,局部变量存储区即栈,new存放的变量存放在堆上,解题的思路是:
如果只在栈上创建对象则禁止在堆上创建,重写operator new 和operator delete
如果只在堆上创建对象则把析构函数定义为私有的,但是一定要定义一个函数把new的
对象删除掉 void distory () const
  {

   delete this;

}

一、只能在堆上创建对象
  1. #include <iostream> 2. using namespace std; 3. 4. class A 5. { 6. public: 7. 8. A() 9. { 10. 11. cout<<"dhjj"<<endl; 12. } 13. void distory () const 14. { 15. 16. delete this; 17. } 18. 19. private : 20. 21. ~A(){ cout<<"this";} 22. 23. 24. 25. }; 26. int main() 27. { 28. 29. 30. A* a=new A; 31. a->distory(); 32. 33. return 0; 34. } 

 

二、只能在栈上创建对象

# #include <iostream> # using namespace std; # # class A # { # public: # # A() # { # # cout<<"dhjj"<<endl; # } # # ~A(){ cout<<"this";} # private: # void* operator new (size_t t); # void operator delete(void *ptr); # # # # # }; # int main() # { # # # A* a=new A; # A a; # # return 0; # }

 

 

你可能感兴趣的:(汇编,delete,存储,Class,iostream,2010)