#include #include using namespace std;
#define safe_delete(x) \ \}
#define safe_delete_ary(x) \ \}
class ca
~ca() {}
void setter_m_itest(int iin)
int getter_m_itest()
private:
int m_itest;
};void fntestclass();
void clear_cin();
int main(int argc, char** argv, char** envp)
void fntestclass()
/** new物件陣列時的記憶體布局
+ pcaary 0x007d3ddc
007d3dd8 04 00 00 00 .... ; ///< 類陣列元素個數 = 4
007d3ddc 00 00 00 00 .... ; ///< 類陣列開始, ca[0]
007d3de0 01 00 00 00 .... ; ///< ca[1]
007d3de4 02 00 00 00 .... ; ///< ca[2]
007d3de8 03 00 00 00 .... ; ///< ca[3]
*/pcaary = new ca[icntary];
if (null != pcaary)
}safe_delete_ary(pcaary);
/** 手工模擬delete刪除單個物件
*/pca = new ca;
if (null != pca)
}/** 手工模擬delete刪除物件陣列
會報錯, 和實際情況不同
以後再研究 :(
*/// 會報錯, 和實際情況不同
// pcaary = new ca[icntary];
// if (null != pcaary)
//
// // free(pcaary); ///< ! crash
// pcaary = null;
// }
// 會報錯, 和實際情況不同
// pcaary = new ca[icntary];
// if (null != pcaary)
//
// // pcaary = null;
// }
}void clear_cin()
物件的記憶體布局
在hotspot虛擬機器中,物件在堆記憶體中的儲存布局可以劃分為三個部分 物件頭header 例項資料instance data和對齊填充padding hotspot虛擬機器的物件頭 有兩類資訊 物件自身的執行時資料 型別指標 mark word被設計成有著動態定義的資料結構,以便在極小的空間內儲...
陣列的記憶體布局
先看下面的例子 int a 5 1.記憶體布局的示意圖所有人都明白這裡定義了乙個陣列,其包含了5個int型的資料。我們可以用a 0 a 1 等來訪問陣列裡面的每乙個元素,那麼這些元素的名字就是a 0 a 1 嗎?看下面的示意圖 如上圖所示,當我們定義乙個陣列a時,編譯器根據指定的元素個數和元素的型別...
C 之建立物件時的new與不new
c 在建立物件的時候可以採用兩種方式 例如類名為test test test 或者 test ptest new test 這兩種方法都可以例項化乙個物件,但是這兩種方法有很大的區別,區別在於物件內容所在的記憶體空間不同,眾所周知,記憶體的分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候...