昨天外面一直下着雨,所以没有去泡成温泉,浪费了京东一天速达的泳裤。嗯…麻将是聚会时大家永恒的主题,可是我得尽量减少自己的娱乐爱好,所以还是听听就好。
幸好我带了本《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
于西岭雪山归来