new 高级用法

 1 /* new 高级用法 */
 2 
 3 #include<iostream>
 4 #include<new>
 5 
 6 const int buf(512);// 限定一个常量整数 
 7 int N(5);// 数组的长度
 8 char buffer[buf] = {0};// 静态区
 9 
10 using namespace std;
11 
12 // p1,p3,p5 作为指针变量在栈区 存储的地址指向堆区 手动释放内存 
13 
14 // p2,p4,p6 作为指针变量在栈区 存储的地址在静态区 自动释放内存   缓冲区  
15 // 避免内存泄露  牺牲了内存访问独立性  用于分配用完了就不会再用的数据
16 
17 void main()
18 {
19     double *p1,*p2;
20 
21     std::cout << "\n\n";
22     p1 = new double[N];// 分配内存,N个元素大小
23     p2 = new (buffer)double[N];// 指定区域分配内存
24     
25     for (int i=0;i<N ;i++ )
26     {
27         p1[i] = p2[i] = i + 10.8;// 对数组初始化
28         std::cout << "p1= " << &p1[i] << " " << p1[i] << endl;
29         std::cout << "p2= " << &p2[i] << " " << p2[i] << endl;
30     }
31 
32     double *p3,*p4;
33     std::cout << "\n\n";
34     p3 = new double[N];// 分配内存,N个元素大小
35     p4 = new (buffer)double[N];// 指定区域分配内存
36     
37     for (int i=0;i<N ;i++ )
38     {
39         p3[i] = p4[i] = i + 10.8;// 对数组初始化
40         std::cout << "p3= " << &p3[i] << " " << p3[i] << endl;
41         std::cout << "p4= " << &p4[i] << " " << p4[i] << endl;
42     }
43     
44     double *p5,*p6;
45     std::cout << "\n\n";
46     p5 = new double[N];// 分配内存,N个元素大小
47     p6 = new (buffer)double[N];// 指定区域分配内存
48     
49     for (int i=0;i<N ;i++ )
50     {
51         p5[i] = p6[i] = i + 10.8;// 对数组初始化
52         std::cout << "p3= " << &p5[i] << " " << p5[i] << endl;
53         std::cout << "p4= " << &p6[i] << " " << p6[i] << endl;
54     }
55 
56     std::cin.get();
57 }

 

posted on 2015-06-01 14:24  Dragon-wuxl  阅读(197)  评论(0)    收藏  举报

导航