C++开发中的栈、堆和内存分配

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 leakp所指的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::~Stringps;析构函数:将字符串指针指向的那块东西删掉。

operator deldete(ps); 释放内存

 

动态分配所得的内存块

New一下得到8个字节,在调试模式下多得一些字节

Complex 8  字节  上下(粉色)作用是来记录内存块的大小

动态分配所得的array

Complex * p = new Complex[3];

String *p = new String[3] 第二个是用array new 来分配空间的

array new 必须要搭配 array delete








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值