今天在這裡面看到了這個題目,據說還是google面試題。
總的思想,是把一些在棧上或者堆上面建立物件,所必須的函式設為private使得編譯報錯。
比如:只能在堆上建立,不能在棧上建立。因為棧上的物件,總是要呼叫析構函式。所以把析構函式設為private,然後new出來的物件,顯式的呼叫delete就可以了。
class也提到singleton裡面的那樣方式,把建構函式放進private。但是那樣不管直接new,還是在棧上面建立物件,都不能成功。heaponly
private
: ~heaponly(){};
};int
main()
不能在堆上建立,只能在棧上面建立的物件。
就是把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 這兩種方式是有區別的。靜態建立乙個類物件,是由編譯器為物件在棧空間中分配記憶體,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記憶體空間上呼叫建構函式形成乙個棧物件。使用這種方法,直接呼叫類的建...