Output函数
Ostream& Operator <<(ostream& os, const String & str){ Os<<str.get_c_str(); return os; }创建对象
Stack heap
当你调用函数,函数本身就会形成一个stack,用来放他所接收的参数,自动消失.
堆 则是由藏做系统提供的一块空间,程序可以动态分配 但是必须自己手动消灭
Class Cmoplex{...} ... { Complex c1 (1,2); // ①<-----这时候,析构函数会自动调用 ,来清理,他用的是 stack Complex* p = new complex(3);}如果在①前加个static,则其生命在作用域之后仍在存在,程序结束时才会出现析构函数。-------------------------------------------------------------------------------------------------------------------------------------------------------------全局对象
Calss complex{.....} ...Complex c3 (1,2); Int main() { ...}c3便是所谓的 global object他的生命在整个程序结束之后才会结束,
当然,也可以将其看做 static object 其作用域是整个程序
Class complex{...}...{ Complex* p = new complex; Delete p; }p所指的便是 heap object其生命在delete之后消失。
如果没有删掉,就会出现memory leak;p所指的heap object仍然存在,但是p已经没了 。
New 可以被分解为三个动作:
Complex * pc = new Complex(1,2);
①void *mem = operator new (sizeof(complex));//分配内存
②pc = static_cast<complex*>(mem); //转型
③pc->complex::complex(1,2) //构造函数
Delete :先调用析构函数,在释放内存
①string::~String(ps);析构函数:将字符串指针指向的那块东西删掉。
②operator deldete(ps); 释放内存
动态分配所得的内存块
New一下得到8个字节,在调试模式下多得一些字节
Complex 是 8 字节 上下(粉色)作用是来记录内存块的大小
动态分配所得的array
Complex * p = new Complex[3];
String *p = new String[3] 第二个是用array new来分配空间的
array new 必须要搭配 array delete;
新闻热点
疑难解答
图片精选