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;