重载new和delete后调用构造函数和析构函数顺序

环境:VS2010

问题;探索重载new和delete后构造函数、修改函数的调用顺序

 

代码:

 1 #include <iostream>
 2 using namespace std;
 3 class C
 4 {
 5     float x,y;
 6 public:
 7     C(){
 8         cout<<"调用构造函数"<<endl;
 9     }
10     ~C(){
11         cout<<"调用析构函数"<<endl;
12     }
13     void show()
14     {
15         cout<<"x="<<x<<'\t'<<"y="<<y<<'\n';
16     }
17     void *operator new (size_t s)
18     {
19         void *p=new char [s];
20         cout<<"调用函数new(size_t s),分配空间为:"<<s<<'\n';
21         return p;
22     }
23     void operator delete (void *p)
24     {
25         delete (p);
26         cout<<"调用函数delete(void *p)\n";
27     }
28 };
29 int main(void)
30 {
31     C *p1;
32     p1=new C;
33     p1->show();
34     delete(p1);
35     getchar();
36     return 0;
37 } 

执行结果:.....

 

总结:重载后new时先分配空间,再调用构造函数,delete时先调用析构函数,后释放空间

 

posted @ 2012-11-04 13:04  legendmaner  阅读(229)  评论(0)    收藏  举报