指针(一),栈和自由存储区

自由存储区:也称为堆(heap),可以看作大量的内存段。通过 new 操作符分配的内存在堆中。程序结束之前不自动清除自由存储区。需要由程序来负责释放(delete)。

栈:函数调用的时候,在栈中保存局部变量和函数参数等。当函数返回时,自动清除栈。

new 关键词:

new 进行自由存储区中内存分配。

None.gif unsigned  short   int *  pPointer  =   new  unsigned  short   int ;

如果 new 不能在自由存储区中创建内存,则会返回 null 指针。每次分配新内存时一定要检查指针是否为 null.

delete 操作实际上是恢复指针所指的内存,使之可以再用,而不至于造成内存泄漏(memory leak).
而指针仍然是指针,必要时还可以重新赋值。

如果对已经释放过的指针调用 delete 操作,会导致程序崩溃。当删除指针时,给指针赋值 null(0), 对空指针调用 delete 是安全的。

内存泄漏:一种情况是程序在未释放它指向的内存之前就给指针重新赋值。例如:

None.gif unsigned  short   int *  pPointer  =   new  unsigned  short   int ;
None.gif
* pPointer  =   72 ;
None.gifpPointer 
=   new  unsigned  short   int ;
None.gif
* pPoniter  =   84 ;

在自由存储区中建立对象:

None.gif //  这个是没有参数的构造函数的情况
None.gif
Cat  * pCat  =   new  Cat;

当程序对自由存储区中的对象指针调用 delete 时,在释放内存之前会自动调用对象的析构函数。这个策略给类提供了清理的机会。例子:

None.gif #include  < iostream >
None.gif
using   namespace  std;
None.gif
None.gif
class  SimpleCat
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
public:
InBlock.gif    SimpleCat();
InBlock.gif    
~SimpleCat();
InBlock.gif
InBlock.gif
private:
InBlock.gif    
int itsAge;
ExpandedBlockEnd.gif}
;
None.gif
ExpandedBlockStart.gifContractedBlock.gifSimpleCat::SimpleCat() 
dot.gif {
InBlock.gif    cout 
<< "Constructor called.\n";
InBlock.gif    itsAge 
= 1;
ExpandedBlockEnd.gif}

None.gif
ExpandedBlockStart.gifContractedBlock.gifSimpleCat::
~ SimpleCat()  dot.gif {
InBlock.gif    cout 
<< "Destructor called.\n";
ExpandedBlockEnd.gif}

None.gif
None.gif
int  main( int  argc,  char   * argv[])
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    cout 
<< "SimpleCat Friskydot.gif\n";
InBlock.gif    SimpleCat Frisky;
InBlock.gif    cout 
<< "SimpleCat* pRags = new SimpleCatdot.gif\n";
InBlock.gif    SimpleCat
* pRags = new SimpleCat;
InBlock.gif    cout 
<< "delete pRagsdot.gif\n";
InBlock.gif    delete pRags;
InBlock.gif    cout 
<< "Exiting, watch Frisky godot.gif\n";
InBlock.gif     
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值