new和delete
1 /*new delete*/
2
3 #include<stdio.h>
4 #include<stdlib.h>
5 #include<iostream>
6
7 void main()
8 {
9 int num = 10;// 栈上
10 int *p = new int;// 堆上
11 *p = 5;
12 std::cout << *p << " " << p << std::endl;
13 delete p;
14 delete p;// delete 只能释放一次
15 std::cout << *p << " " << p << std::endl;
16 }
17
18 //----------------------------------------------------
19
20 void main()
21 {
22 int num[10];// 栈上
23 int *p = new int[10];
24 std::cout << p << std::endl;
25
26 //int i = 0;
27 /*
28 for(auto data : p)// 此时auto在这里失效,auto只是用于栈上的数组
29 {
30
31 }
32 */
33
34 for (int i=0;i<10 ;i++ )
35 {
36 p[i] = i;
37 std::cout << p[i] << std::endl;
38 }
39
40 delete []p ;// 删除数组的空间
41 std::cout << p << std::endl;
42 }
43
44 //----------------------------------------------------
45
46 /* 对象数组 */
47
48 #include<iostream>
49 #include<stdlib.h>
50
51 class Person
52 {
53 int *p;
54 int length;
55 public:
56 Person()// 构建的时候初始化
57 {
58 std::cout << "Person被创建" << std::endl;
59 }
60
61 ~Person()// 删除的时候释放内存
62 {
63 std::cout << "Person被销毁" << std::endl;
64 }
65 };
66
67 void main()
68 {
69 Person *p = new Person[10];
70
71 delete []p;// 基本数据类型 可以直接delete 复杂类型必须加上[]
72 }
73
74 //----------------------------------------------------
75
76 void main()
77 {
78 // C++二位数组
79
80 int *p = new int[80];
81 int(*px)[10] = (int(*)[10])p;
82
83 // int (*px)[10] = new int [80];// 不行 new只能分配线性
84
85 int data = 0;
86 for (int i=0;i<8 ;i++ )
87 {
88 for (int j=0;j<10 ;j++ )
89 {
90 p[i][j] = data++;
91 std:: cout << " " << px[i][j];
92 }
93 std::cot << std:: endl;
94 }
95 }
96
97
98 //----------------------------------------------------
99
100 /* new delete 重载 */
101
102 class Person
103 {
104 public:
105 static int jishuqi;// 静态变量
106 int *p;
107 int length;
108 public:
109 Person()// 构建的时候初始化
110 {
111 std::cout << "Person被创建" << std::endl;
112 }
113
114 ~Person()// 删除的时候释放内存
115 {
116 std::cout << "Person被销毁" << std::endl;
117 }
118
119 static void * operator new (size_t size)
120 {
121 jishuqi+=1;
122 std::cout << "对象被创建" << std::endl;
123 Person *ptemp=::new Person;// 劫持
124 return ptemp;
125 }
126
127 static void operator delete (void *p)
128 {
129 jishuqi-=1;
130 std::cout << "对象被销毁" << std::endl;
131 ::delete p;
132 }
133 };
134
135 int Person::jishuqi = 0;
136
137 void main()
138 {
139 Person *p1 = new Person;
140 Person *p2 = new Person;
141 Person *p3 = new Person;
142 Person *p4 = new Person;
143
144 delete p1;
145
146 std::cout << Person::jishuqi << std::endl;
147 }
长风破浪会有时,直挂云帆济沧海
posted on 2015-05-27 16:17 Dragon-wuxl 阅读(121) 评论(0) 收藏 举报
浙公网安备 33010602011771号