- 如果有这样一个需求:使用一块内存存储一种类型的对象,很快就能使用完。然后还需要一块内存存储另一种类型的对象,还是很快使用完。那么一般的操作时使用多块内存,但是多块内存的问题是,多次new和free,效率不高;另外,多块内存占用空间大。
- 如果上述过程是一个有先后顺序的,那么可以使用一块内存来满足。相当于首先预申请了一块内存,依次为此块内存指定某种类型的对象,指定的过程是会执行对象构造的,使用完后再对此对象进行析构。当确定不再使用这块内存时,再回收此内存
- 上述现象,可以使用placement new来实现
- 语法:
Class A* = new (ptr)A;
//Class A 为一个对象
//ptr为一个已经申请好的内存
//placement new的语法是new (ptr)A
- 上述的ptr可以是堆内存,同样也可以是栈内存
placement new实际上仅是为ptr地址构造了A类型的对象
如果是堆内存,记得回收