c++ primer plus 第九章-定位new運算符


編譯器使用三塊獨立的內存:一塊用於靜態變量(可能再細分),一塊用於自動變量,另一塊用於動態存儲。
new初始化:若是要爲內置的標量類型(如int或double)分配存儲空間並初始化,可在類型名後面加上初始值,並將其用括號括起來:
int *pi=new int(6);
double * pd= new double(99.99);
要初始化常規結構或數組,須要使用大括號的列表初始化:
struct where {
double x;double y; double z;
}
where *one= new where{2.5 ,5.3, 7.2}
int * ar= new int[4] {2,4,6,7}
定位new運算符:new負責在堆中找到一個足以可以知足要求的內存塊。new運算符還有另外一種變體,被稱爲定位new運算符,它讓你可以指定要使用的位置,程序員可能使用這種特性來設置其內存管理規程、處理須要經過特定地址進行訪問的硬件或在特定位置建立對象。
要使用new定位特性,首先須要包含頭文件new。程序員


#include <new>
char buffer1[50];
char buffer2[500];
struct chaff數組

{
char dross[20];
int slag;
};指針

chaff *p1, *p2;
int *p3, *p4;
p1=new chaff;  //place structure in heap
p3=new int[20];  //place int array in heap
p2=new (buffer1) chaff;  //place structure in buffer1
p4=new (buffer2) int[20];  //place int array in buffer2
上述代碼從buffer1中分配空間給結構chaff,從buffer2中分配空間給一個包含20個元素的int數組。
定位new運算符的另外一種用法是:將其與初始化結合使用,從而將信息放在特定的硬件地址處。基本上,它只是返回傳遞給它的地址,並將其強制轉換爲void *,以便可以賦給任何指針類型。對象

相關文章
相關標籤/搜索