new/deleteとnew[]/delete[]の底辺呼び出しと簡単実現

831 ワード

newを使う時に二つのことをしました.
1、operator newの割り当てスペースを呼び出します.
2、コンストラクタを呼び出してオブジェクトを初期化する
deleteを使う時も二つのことをしました.
1、解析関数を呼び出してオブジェクトを整理する
2、operator delete関数を呼び出して空間を解放する
new[N]を使う時も二つのことをしました.
1、operator newの割り当てスペースを呼び出します.
2、N次コンストラクタを呼び出してN個のオブジェクトを初期化する.
delete[]を使う時も二つのことをしました.
1、N次コンストラクタを呼び出してNつのオブジェクトを整理する
2、operator delete関数を呼び出して空間を解放する
位置合わせnew表式:割り当てられた元の空間における配置関数を呼び出してオブジェクトを初期化する位置付けnew表式.
newタイプ;
new(plceuderes)type(initializer-list)
placeaddressはポインタでなければなりません.initializer-listは初期化リストです.
mallco/freeと位置決めnew表現を使ってnew/deleteとnew[]/delete[]をシミュレートします.
例:
class A
{
public:
	A(int a=2)
		:_a(a)
	{
		cout <~A();      //      
	free(pa);

	//  10 A     
	A* pa = (A *)malloc(sizeof(A)*10);
	for (int i = 0; i ~A();
	}
	free(pa);
}