重载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时先调用析构函数,后释放空间。

浙公网安备 33010602011771号