C++如何限制对象在堆上或栈上生成
生活随笔
收集整理的這篇文章主要介紹了
C++如何限制对象在堆上或栈上生成
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1,限制類的對象只能生成在棧上
將 operator new?各種原型設為私有
#include <iostream>class OnlyOnStack { public:OnlyOnStack() {std::cout << "ctor!" << std::endl; }~OnlyOnStack() {std::cout << "dctor!" << std::endl; } private:void* operator new (std::size_t size);void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;void* operator new (std::size_t size, void* ptr) noexcept;void* operator new[](std::size_t size);void* operator new[] (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;void* operator new[] (std::size_t size, void* ptr) noexcept; };int main() {OnlyOnStack stack;// OnlyOnStack *ps = new OnlyOnStack; }?
2,限制類的對象只能生成在堆上,有兩種方法
2.1?使用單例模式:構造函數私有,getInstance()中獲取單例時new?出來一個
2.2?析構函數私有,這樣編譯器就會自動阻止你定義棧上對象,析構函數私有了就需要類提供一個public的銷毀函數給外部用
總結
以上是生活随笔為你收集整理的C++如何限制对象在堆上或栈上生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】5亿个数找中位数
- 下一篇: C++构造函数调用虚函数的后果