只能在棧上或者堆上建立的物件

2021-09-07 09:29:35 字數 593 閱讀 2301

今天在這裡面看到了這個題目,據說還是google面試題。

總的思想,是把一些在棧上或者堆上面建立物件,所必須的函式設為private使得編譯報錯。

比如:只能在堆上建立,不能在棧上建立。因為棧上的物件,總是要呼叫析構函式。所以把析構函式設為private,然後new出來的物件,顯式的呼叫delete就可以了。

class

heaponly

private

: ~heaponly(){};

};int

main()

也提到singleton裡面的那樣方式,把建構函式放進private。但是那樣不管直接new,還是在棧上面建立物件,都不能成功。

不能在堆上建立,只能在棧上面建立的物件。

就是把new和delete操作符過載為private。

class  onlystack 

private:  

void* operator new(size_t  );

void operator  delete(void*ptr); 

//}  int main(  int  argc,  char*  ar**  )  

只能在堆上生成的物件 VS 只能在棧上生成的物件

1.只能在堆上 即禁止在棧上生成。如何實現?當物件建立在棧上面時,是由編譯器分配記憶體空間的,呼叫建構函式來構造棧物件。如果類的析構函式是私有的,則編譯器不會在棧空間上為類物件分配記憶體。所以,只需把類的析構函式宣告為private即可禁止該類在棧上生成物件。但是別忘了提供乙個public的函式用於...

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

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

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

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