- allocator 动态分配内存,将内存分配和对象构造分开。
https://blog.youkuaiyun.com/u012333003/article/details/22104939
- new、delete 和 new[]/delete[]的区别
参考链接https://blog.youkuaiyun.com/zyazky/article/details/52627200
int *pia = new int[10];
delete []pia;
1.对于非内置对象,在 new []
时将多分配 4 个字节,用来存储数组的大小。调用delete[]时会先取出数组大小,传入 operator delete[]
函数的参数不是数组对象的指针 pAa,而是 pAa 的值减 4。
2.使用 new []
用 delete 来释放对象的提前是:对象的类型是内置类型或者是无自定义的析构函数的类类型
如果是自定义析构函数的类,用delete只释放了第一个对象
- new的使用
参考链接:https://blog.youkuaiyun.com/caimagic/article/details/51493741
throwing (1) | void* operator new (std::size_t size) throw (std::bad_alloc); | ||
| void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw(); | ||
| void* operator new (std::size_t size, void* ptr) throw(); |
placement new 的方法是实现在ptr所指地址上构建一个对象(通过调用其构造函数)。
A* a = new A; //调用throwing(1)
A* a = new(std::nothrow) A; //调用nothrow(2)
char buf[100]; new(buf) A(); //placement 内存池技术