在 C++ 中指定内存位置创建对象
在指定内存位置创建对象
作为一门允许程序员自己操作内存的语言, C++ 提供了三种方式在指定的内存位置创建对象.
而为什么要在指定位置创建对象呢?作用有三:
- 预先足够的分配内存,以便减少使用中分配内存的操作.
- 重复利用内存,减少内存碎片.
- 方便进行细粒度管理.
实现这个需求的方式有三种.
在接下来的文章中,我们使用如下类作为示例.
class Person { |
Placement new
首先分配足够大的内存,
然后在使用 new
关键字时穿入指向内存首字节的指针.
char mem[sizeof(Person)]; |
注意:
- 分配的内存必须能装下对象.
- 指向内存的指针必须对齐.
- 显式调用析构函数销毁对象.
Operator new
因为使用 new 的时候会先调用 operator new
(然后调用类构造函数),
可以通过重载它返回已分配的内存指针.
其原型为:
void * operator new (size_t sz)
但是这样需要指针是全局的.......
allocator
可以使用 c++ 官方 <memory> 库中的 allocator 来做这件事. allocator 定义了分配和回收内存,创建和销毁内存上的对象等操作.
std::allocator<Person> alloc; |
引用
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
GitalkValine