設計乙個類,只能在棧上建立物件
//思考的幾個要點:
//(1)只能在棧,說明不能在堆上建立,考慮堆上建立物件的兩種方法-->new和定位new表示式,原理-->先呼叫operator new開空間,然後執行建構函式
//所以遮蔽掉operator new(即放成私有)這樣就排斥了直接new和定位new表示式
//注意:上面的方法只能排斥掉在堆上建立,但是在全域性區仍然可以
//(2)防止在全域性區建立:建構函式設為私有(但這樣一來在棧上直接建立也不行了)
//解決辦法:提供乙個介面,建立棧上的物件(存在問題:成員只能用物件呼叫,但是棧上的物件都建立不出)
//(解決辦法->)將這個介面設為靜態的,這樣就不依賴於物件呼叫
//設計乙個類:只能在棧上建立物件
//思考的幾個要點:
//(1)只能在棧,說明不能在堆上建立,考慮堆上建立物件的兩種方法-->new和定位new表示式,原理-->先呼叫operator new開空間,然後執行建構函式
//所以遮蔽掉operator new(即放成私有)這樣就排斥了直接new和定位new表示式
//注意:上面的方法只能排斥掉在堆上建立,但是在全域性區仍然可以
//(2)防止在全域性區建立:建構函式設為私有(但這樣一來在棧上直接建立也不行了)
//解決辦法:提供乙個介面,建立棧上的物件(存在問題:成員只能用物件呼叫,但是棧上的物件都建立不出)
//(解決辦法->)將這個介面設為靜態的,這樣就不依賴於物件呼叫
class stackonly
private:
stackonly()
void*operator new(size_t size);
void operator delete(void*p);
};//stackonly p;
int main()
C 設計乙個類,只能在棧 堆 上建立物件
設計乙個類,只能在棧上建立物件 使用new運算子,物件會建立在堆上,也就是說只要不用new去建立物件就可以實現,我們知道new和delete分別呼叫了operator new和operator delete,如果我們把這兩個函式宣告為私有的,操作符new就不能用了。class a a private...
設計乙個類,只能在堆上建立物件
設計乙個類 只能在堆上建立物件 思路 說明不能在棧上建立物件,考慮到棧上建立物件會發生哪些事 1 建構函式 2 拷貝構造 所以先遮蔽掉建構函式,即設為私有。存在問題 在堆上建立物件也會呼叫建構函式,設為私有對其有影響 解決 提供成員函式介面,在成員函式中建立堆物件。存在問題 成員函式需要物件來呼叫,...
如何建立乙個類只能在堆(棧)上建立物件
在c 中,類物件的建立方式有兩種,一種是靜態建立類物件,如a a 另一種是動態建立類物件,如a p new a 這兩種方式是有區別的 靜態建立類物件 是指全域性物件,靜態物件,以及分配在棧區域內的物件,編譯器對它們的記憶體分配是在編譯階段就完成的,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記...