ctor:构造函数
上图中,函数结束时c1占用的栈的内存自动释放,但是p占用的堆的内存要手动释放。
堆的生命周期就在函数内,结束的时候析构函数被调用(说明析构函数是用来清理的)
new可以分解为三个动作:开内存;转型;调用构造函数。
deleta可以分解为两个动作:调用析构函数;释放内存。
内存管理
例如:上图中第一个:在vc编译器下,debug模式下动态new一个complex类型(2个double)的内存,实际开辟多大的,如图第一列。2个double是8个字节;前边带8个灰色框,后边带一个灰色框,每个灰色框是4个字节;最后再带两个红色框,一个红色框是4个字节。所以总共开辟了52个字节,又因为vc编译器开内存是16的倍数,所以最后总共开辟64个字节的内存。
上图中第二个是非debug模式下,开16个字节的内存。
上图第3个是debug模式下,开辟一个string(4个字节),共开辟48个字节内存。
上图中第4个是非debug模式下,开辟一个string(4个字节),共开辟16个字节内存。