6.1 對象的構造和解構
對象的解構發生在離開目前區域之前,而不是說大括号之前
對象數組:編譯器調用一個甯為vec_new()的函數,産生出以class object對象構造而成的數組。
void * vec_new(void * array, // 數組的起始位址
size_t elem_size, // 每個class object的大小
int elem_cout, // 數組元素的個數
void (* construcotr) (void*) , // default constructor 的函數指針
void (* destructor) (void * , char) // default destructor的函數指針
參數array帶有的若不是具名數組的位址,就是0。如果時0 ,那麼數組江經由應用程式的new運算符,被動态配置于heap中! 載vec_new被調用的過程中,會存放相應的cokkie,儲存次記憶體塊的元素個數。注意:是元素個數,而不是整個數組的大笑。是以使用base pointer釋放 derived pointer會引起記憶體洩漏噢!
point knowts[10]; --->vec_new(&knots,sizeof(point),10,&point::point,0)
point knowts[10]={ point(),point(1,2,3) } -->point::point (&knots[0] );
point::point (&knots[1] );
vec_new(&&knowts+3*sizeof(point) , sizeof(point), 7,&point::point ,0)
point3d *p_array = new point3d[10];
----> point3d * p_array;
p_array = vec_new ( 0, sizeof(point3d),10,&point::point,&point3d::~point3d);
釋放資源:void* vec_delete(
void * array, // 數組起始位址
size_t elem_size, // 每個object 的大小
int elem_count, // 述組中的元素數目
void (*destructor) (void*, char)
)
Placement Operator new 的語義
point2w *ptw = new (arena) point2w;
釋放方法: ptw->~point2w();