重阳 ChongyangLee

_____关注可编程技术______

导航

数组指针 operator new[](size_t sz)

Posted on 2008-09-18 21:33  ChongyangLee  阅读(350)  评论(0编辑  收藏  举报

    如果一个类或其基类有析构函数,当申请数组指针时,会多出几个字节用于 delete [] 运算符,以便为每一个对象调用析构函数计数。下面是一个测试例子。

 

 1 
 2 
 3 #include <cstdio>
 4 
 5 using namespace std;
 6 
 7 //没有定义析构函数
 8 class C1
 9 {
10 private:
11     char ch[10];
12 };
13 
14 //定义有 非虚拟 析构函数
15 class C2
16 {
17 public:
18     ~C2()
19     {
20     }
21 private:
22     char ch[10];
23 };
24 
25 
26 //基类定义有 非虚拟 析构函数
27 class C3: public C2
28 {
29 private:
30     char ch[10];
31 };
32 
33 //定义有 虚拟 析构函数
34 class C4
35 {
36 public:
37     virtual ~C4()
38     {
39     }
40 private:
41     char ch[10];
42 };
43 
44 //overload global operator new[]
45 void* operator new[](size_t sz)
46 {
47     printf("alloc memory size:%d bytes\n", sz);
48     return ::operator new(sz);
49 }
50 
51 //
52 
53 
54 int main()
55 {
56     //内置类型
57     printf("sizeof(int):%d\n"sizeof(int));
58     int* pi = new int[10];
59 
60     printf("sizeof(C1):%d\n"sizeof(C1));
61     C1* pc1 = new C1[10];
62 
63     printf("sizeof(C2):%d\n"sizeof(C2));
64     C2* pc2 = new C2[10];
65 
66     printf("sizeof(C3);%d\n"sizeof(C3));    
67     C3* pc3 = new C3[10];
68 
69     printf("siezeof(C4):%d\n"sizeof(C4));
70     C4* pc4 = new C4[10];
71 
72     delete [] pc1;
73     delete [] pc2;
74     delete [] pc3;
75     delete [] pc4;
76 
77     delete [] pi;
78 
79 }