rt

解决方案 »

  1.   

    在预先定义的内存位置构造一个对象 
    在预先定义的内存缓冲构造一个对象有许多有用的应用。例如,一个定制的垃圾搜集器能使用一个大的预分配内存缓冲,用户在这个缓冲中构造其对象。当不再需要这些对象时,它们的存储空间被自动收回。
       这个技术在重视时间的应用中也很有用。在预先分配的内存缓冲构造一个对象是一种“时间常量”操作,之所以这样说是因为程序分配操作本身不会浪费宝贵的时间。同时也要注意当系统没有足够的内存时,动态内存分配可能失败。因此,对于重视任务的应用,预先分配一个足够大的缓冲有时是不可避免的。
        许多应用需要在给定的时间构造不同类型的对象。想一想这样一个例子,一个GUI应用根据用户的输入,每次、显示不同的对话框,利用重复分配和释放内存,这个应用能提前创建一个内存缓冲,并能在这个缓冲里反复构造和销毁不同类型的对象。
        C++提供了几种特点来方便实现在预先决定的内存位置构造一个对象的任务。在这些特点中,包括一个特殊形式的new操作符,叫做“定位new”(placement new)操作,以及一个显式的析构处理。实现方法如下:
        第一步:分配一个足够的内存缓冲区,以便存放给定类型的对象。如果想要每次构造不同类型的对象,需要至少以最大的对象所占空间的大小分配一个缓冲。预分配的缓冲是在可用内存空间中分配的纯字符数组。 要#include<new.h>
      

  2.   

    char *p=new (pbuf)char[3]; 
    这写法是什么意思啊?
      

  3.   

    “这写法是什么意思啊?”
    用pbuf开辟的空间给p用,其实p并没有开辟内存
      

  4.   

    operator placement new[]你这样干没有实际意义,把三个char丢到一大把的char里面去看不出来要干什么……估计你只是偶尔看到这个用法而以……但是如果你需要构造一大把的类丢到某个指定的地方的话,就要靠这个了。而且释放这些类的时候不能直接delete/delete[],要手动调用每个对象的dtor,然后释放你new(不是placement new)出来的空间。不这样的话会天下大乱……