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)    收藏  举报

导航