new和delete是管理堆内存的开辟和释放
如果你想在进程的全局范围内,实现一个内存池的话,你可以通过重载operator new和operator delete做内存的开辟和释放。
new和delete的重载
1 |
|
结果(注意要在Linux环境下编译运行)
从这个结果可以看出new了5个int类型的对象,却发现size是28,这是因为在内存起始地址还会有一个内存存储数组对象的个数,所以size是28(32位系统占4个字节,64位系统占8个字节)
1、怎么防止内存泄漏
智能指针
2、为了防止发生内存泄漏,你在代码应该怎么处理
1 | vector<void *>vec; |
3、new和delete配对使用,new[]和delete[]配对使用,那什么时候可以混用?
如果是对象类型,而且对象有析构函数,那么开辟对象数组时,会多开辟8个字节存储对象的个数,目的时在delete []p 的时候,知道调用多少次析构函数。
如果是对象类型,而且对象有析构函数需要调用,那么不能混用,如果是内置类型,自定义类型(但是没有析构函数),可以混用。