設計乙個類,只能在棧上建立物件

2021-09-05 12:32:02 字數 964 閱讀 4983

設計乙個類,只能在棧上建立物件

//思考的幾個要點:

//(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 這兩種方式是有區別的 靜態建立類物件 是指全域性物件,靜態物件,以及分配在棧區域內的物件,編譯器對它們的記憶體分配是在編譯階段就完成的,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記...