如何限制一个类对象只在堆上分配或者只在栈上分配?

   
   
1.第一种说法
// 只在栈上 class stackonly { private : void * operator new (size_t Size) { } }; // 只在堆上 class heaponly { private : heaponly(){} ~ heaponly(){} };


前者利用了c++的重载机制+访问控制机制。后者利用了c++的访问控制机制。
前者重载了new运算符,并设为私有,因此,当用 new stackonly;时编译器就会报错。
后者则将构造函数设为私有,因此,当你 heaponly h;时会自动调用构造函数,这时编译器也会报错。

这种技巧在c++中是很常用的比如设计模式中的单件模式。


2. 第二种说法

   
   
只在栈上的类: // 私有重载new即可,但只是限制了不能建立在new出的堆上,并没有限制全局以及局部静态类,因此严格 // 来说不能算“只在栈上” class A { private : static void * operator new (size_t size){}; };


C/C++ code
   
   
只在堆上的类: // 私有化析构函数,通过一个public函数来进行实际的析构。 class B { public : void del() const { }; private : ~ B(){}; };

3. 第三种说法

1 在C++中如何限制一个类对象只在堆上分配?
仿照设计模式中的单实例模式或者工厂模式来解决,这里采用单实例模式方式来说明。
将类的构造函数属性置为private,同时提供static成员函数getInstance,在函数中new一个新对象,然后返回对象指针或者引用。这样实现的类可以保证只可以在堆上分配对象。

2 在C++中如何限制一个类对象只在栈上分配?
重载类的new操作符,使重载后的new操作符的功能为空。这样就使外层程序无法在堆上分配对象,只可以在栈上分配。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值