栈、堆、类模板、函数模板、static
Stack:是存在于某作用域的一块内存空间。列如当你调用函数,函数本身会形成一个stack用来放置它所接收的参数,以及返回地址。
在函数本体内声明的任何变量,其所使用的内存都来自stack
Heap:是指由操作系统提供的一块全局内存空间,程序可动态分配从其中获得若干区块。
用new取得的在作用域外也可以使用,不用时需要释放内存空间
一般的函数只能在作用域内使用,离开作用域就死亡了。自动调用析构函数
{ complex c1(1,2) }
static对象 其生命在作用域结束之后仍然存在 直到整个程序结束。
{ static complex c1(1,2) }
全局对象 在任何{}外的 生命在整个程序结束后才消失
堆对象的生命期 不加delete会造成内存泄露
{ complex* p = new complex;得到p指针 ... delete p; }
new :先分配内存 再转型 调用构造函数
delete:先调用析构函数 在释放内存
inline String::String(const char* cstr =0) { if(cstr){// 分配足够空间 还有一个结束符号 字符串要有最后一个结束符 m_data = new char[strlen(cstr)+1];//array new 需要搭配array delete 数组形式分配内存空间 strcpy(m_data,cstr); } else{ //未指定初值 new分配一个字符内存 结束符号 m_data = new char[1]; *m_data = '