深度探索C++物件模型第六章 執行其語義學
阿新 • • 發佈:2019-01-03
物件陣列:編譯器呼叫一個寧為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)
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)