抽象类管理内存

 1 /* 内存管理包含类的继承 */
 2 
 3 #include<iostream>
 4 #include<vector>
 5 using namespace std;
 6 
 7 vector<char*>myv;
 8 
 9 // 管理所有的内存地址 释放所有new 的个数
10 class base
11 {
12 public:
13     static int num;
14     void * operator new (size_t size)
15     {
16         num+=1;
17         char *p = ::new char[size];
18         myv.push_back(p);
19         return p;
20     }
21 
22     void * operator delete(void *p)
23     {
24         for(auto i : myv)
25         {
26             if(i==p)
27             {
28                 num-=1;
29                 ::delete p;
30             //    myv.erase(p);
31                 break;
32             }
33         }
34     //    num-=1;
35     //    ::delete p;
36     }
37 
38     virtual void print() = 0;// 打印对象个数
39 
40 };
41 
42 int base::num = 0;
43 
44 class X:public base
45 {
46 public:
47     void print()
48     {
49         cout << this->num << endl;
50     }
51 };
52 
53 
54 class Y:public base
55 {
56 public:
57     void print()
58     {
59         cout << this->num << endl;
60     }
61 };
62 
63 void main()
64 {
65     X *p1 = new X;
66     X *p2 = new X;
67     X *p3 = new X;
68     
69     delete p3;
70 
71 
72     Y *p4 = new Y;
73 
74     Y *p5 = new Y;
75 
76     p2->print();
77 
78     cin.get();
79 }

 

posted on 2015-06-10 17:11  Dragon-wuxl  阅读(131)  评论(0)    收藏  举报

导航