new个妹子的话题

来源:互联网 发布:ipad软件无法上网 编辑:程序博客网 时间:2024/05/01 05:32
void* rawMem= operator new(sizeof(Meizi)* 5);Meizi *meizi = new(rawMem) Meizi[5];

0、不着边际的瞎扯

程序员找不着对象,所以有人出主意:new一个啊。

你以为妹子是随便就new出来的么,首先你要解决几个问题:

1、new个什么样的妹子。

2、new多少个妹子。

3、把妹子new在哪儿。


第一个问题决定了你的妹子的class,第二个问题解决了你的妹子是单个还是数组,第三个问题则解决了你的妹子的别野的问题(哈哈哈)。


1、屌丝new

这个大家都见过了,而且各种有new的语言长相都这样:

假设有个class叫

class Meizi{};
那么new一个妹子的屌丝做法就是:

Meizi *meizi = new Meizi();

具体说来就是,你去婚介,跟婚介的人说,有妹子就行。。于是婚介就随便在堆上找了一块儿内存,给你new了一个。new的过程呢,由于都是默认的,所以具体占用的内存位置和长相都没有跟你商量,只是new出来以后告诉你,这就是你要的。

……

(十年之后……)

meizi嫌弃你了,所以你就要跟ta断绝往来,于是就

delete meizi;

完事儿。


2、土豪new

如果您是土豪,可能会采取下面的方式:

Meizi *meizi = new Meizi[N];
房子多,哈哈。

一月之后……

delete[] meizi;


3、神秘new(placement new)

就是你很久之前就有了一套别墅,然后这时候想要有个ta,让ta去住。神秘new。不能让原配知道~~

void* rawMem = operator new(sizeof(Meizi)* 5);Meizi *meizi= new(rawMem) Meizi[5];

rawMem是房子的地址,强调这是一房子,里面是什么不知道:

然后不是房价涨了么,你要卖房子~~

delete[] meizi;
delete rawMem行不行?您要拆迁,总得先让人搬出来吧。

delete meizi行不行?哦,您只管一个,其他的都不管了是么。


4、东窗事发……

资源总是有限的。而且还受河东“先生”的约束,总是会出现磕磕碰碰。

买不到房子妹子能跟你么?至少丈母娘不愿意跟你。

买不到的时候,就处理处理下面的事情,总不能直接exit不活了吧。处理什么呢?

newHandler里面可以定义你要处理的事儿,比如微信全民打飞机消遣一会儿什么的。只要在你的main函数一开始执行setNewHandler(*pFunc),而这个func就是一个无参无返回的函数指针newHandler。

--------------------------------------------------------------------------------------------------------

其实知道了上面的这些东西,C++里面的new大体上也就了解了。不同于直接定义值类型,new出来的房子一定是在堆内存上,堆内存的访问没有栈内存快,频繁的分配释放也容易造成碎片,但它的特点是较大,较灵活,系统没有必要把堆内存作为一个连续的内存块分配给你。嗯,所以各个学校都在搞郊区的分校,因为市内实在是没有内存给它们了。咳咳。。


new 的时候我们似乎不怎么关心内存不够的问题,因为我们似乎根本遇不到这种情况。哦,如果你的目标设备是嵌入式设备,或是移动设备,那即便是iPhone,内存也不是很大嘛。所以newHandler就是用来支持这种问题的处理的。

new就干了两件事儿,分配内存,初始化对象,当然我们也看到神秘new居然把这两步分开来搞,这种做法不是很常见,但对于写底层框架似乎也是免不了出现。

0 0
原创粉丝点击