仅堆中创建VS仅栈中创建

昨天外面一直下着雨,所以没有去泡成温泉,浪费了京东一天速达的泳裤。嗯…麻将是聚会时大家永恒的主题,可是我得尽量减少自己的娱乐爱好,所以还是听听就好。
幸好我带了本《C++沉思录》来给我的书包增肥!在看到代理、handle还有copy on write时,触发了我和小胖前两天差点打赌的一碗面,关于一个简单类的直接实例化。遗憾的是小胖太机智,最后我还是没吃成。不过那个类挺有意思,一个简单的、仅堆中可创建的类。

#pragma once
#ifndef HEAD_H
#define HEAD_H
#include<iostream>
class FooA {
private:
	int n;
	~FooA(){
		std::cout << "Release" << std::endl;
	}
public:
	FooA(int i):n(i){}
	//interface
	void release() {
		this->~FooA();
	}
};
#endif

是的,这个类由于析构函数丢private里了,是不能直接实例化出来的!这可以成为一些特殊需求的应用

#include"Head.h"
int main()
{
	FooA *p = new FooA(8);
	p->release();
}

那么下面的问题来了,我想要一个相反的类,一个仅在栈中可以创建的类!由于我暂时没有想到怎么实现(我想有可能是重写new?),在回程途中,借着吃面完毕那会,趁机问了下胖哥,结果胖哥装傻充楞(对,胖哥常年处于二哈状态),时间也不允许过多的交流,所以…算了,我还是没有放弃治疗,因为我印象里,梅耶大师的书有写过,等我想想再补上咯~

好了,回忆录完毕,这个问题就实现过程而言,也是简单的发指,2个delete解决问题

#pragma once
#ifndef HEAD_H
#define HEAD_H
#include<iostream>
class FooA {
private:
	int n;
public:
	FooA(int i):n(i){}
	static void* operator new(size_t size) = delete;
	static void operator delete(void *ptr) = delete;
};
#endif

Zr
2020-01-07
于西岭雪山归来

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值