18.1 new,delete的进一步认识
18.1.1 总述与回顾
内存有关的高级用法,如内存池等
18.1.2 从new说起
- new类对象时,加与不加括号的差别
A *pa=new A() // 带号的写法,类A的成员变量被初始化为0
A *pa2=new A // 这种写法,m_i成员变量中是随机值
但是增加了一个构造函数后,情况又有所不同,初始化的工作交给构造函数因此不一定会初始化为0
- new做了什么事情
new是关键字
new关键字主要做了两件事情
A * pa=new A()
调用operator new(调用了malloc)
调用类A的构造函数
可以表示为:
A * pa=new A()
operator new();
malloc();
A::A()
delete关键字主要做了两件事情
delete pa;
A::~A(); // 如果有析构先调用析构
operator delete(); // 函数
free(); // c分格函数释放内存
new与malloc的区别
new是关键字/操作符,malloc是函数
new一个对象的时候,不但分配内存而且还会调用类的构造函数
在某些情况下A * pa=new A()可以把A的成员变量设置为0,这是new的能力而malloc没这个能力