一.New,Delete认识:
1.new类对象时候加括号的差别
答:如果是个空类,那么没有区别
2.如果类中有成员变量,则带括号的初始化会把成员变量的有关内存清零,但不是整个对象的内存全部清零
3.当类中有构造函数的时候,加括号和不加都一样(因为编译器把初始化工作都交给你写的构造函数处理了)
二.New内存分配细节探究:
- 一块内存的的回收,影响范围很广(前后内存)
- 分配内存时,为了记录和管理分配出去的内存,会额外分配一些内存,造成内存的浪费
- New操作:
- Operator new
- Malloc()
- A::A()
- Operator new
Delete操作
- A::~A()
- Operator delete
- Free()
注:如果不使用自己重载的operator new/operator delete,使用::new/:: delete
三.定位new(placement new):
1.有placement new,但是没有对应的placement delete
功能:在已经分配的内存中初始化一个对象
- 定位new不分配内存,你需要先分配内存
- 初始化一个对象
注:手动调用构造函数一般是不可以的
用法:
New (地址)类类型
四.内存池概念与实现:
- 内存池减少malloc的调用次数,也就减少内存的浪费
- 实现原理
- Malloc申请一大块内存,当需要使用的时候,从中一点一点分配,当内存池内存不够了,再malloc申请一大块内存