物件只能建立在棧上(堆上)

2022-07-25 05:15:09 字數 508 閱讀 5660

只能建立在棧上:

//禁用new操作符,變數就只能定義在棧上了,new operator首先呼叫operator new,把operator new定義為private即可

class

a

void

operator

delete

(){}

public

: a(){}

}

只能建立在堆上:

//不能直接呼叫析構函式,那麼就無法在棧上建立物件,在堆上建立物件是間接呼叫建構函式的,所以可以!

//當然雖然可以在堆上建立物件,但是無法直接呼叫delete操作了,因為delete要呼叫析構函式,所以必須

//單獨定義析構函式

class a

void destroy()

protected://乾脆把析構和構造都封裝起來,只暴露介面

a(){}

~a(){}

}

如何限制物件只能建立在堆上或者棧上

在c 中,類的物件建立分為兩種,一種是靜態建立,如a a 另一種是動態建立,如a ptr new a 這兩種方式是有區別的。靜態建立乙個類物件,是由編譯器為物件在棧空間中分配記憶體,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記憶體空間上呼叫建構函式形成乙個棧物件。使用這種方法,直接呼叫類的建...

如何限制物件只能建立在堆上或者棧上

在c 中,類的物件建立分為兩種,一種是靜態建立,如a a 另一種是動態建立,如a ptr new a 這兩種方式是有區別的。靜態建立乙個類物件,是由編譯器為物件在棧空間中分配記憶體,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記憶體空間上呼叫建構函式形成乙個棧物件。使用這種方法,直接呼叫類的建...

如何限制物件只能建立在堆上或者棧上

在c 中,類的物件建立分為兩種,一種是靜態建立,如a a 另一種是動態建立,如a ptr new a 這兩種方式是有區別的。靜態建立乙個類物件,是由編譯器為物件在棧空間中分配記憶體,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記憶體空間上呼叫建構函式形成乙個棧物件。使用這種方法,直接呼叫類的建...