1:  若引用变量 a 引用的是 对象 b ,则 对象的构造和析构由 b完成, 与 a 无关。

2:  若被引用变量 a 引用的是 能够自动调用构造函数的 new 生成的,则必须用能自动调用 析构函数的  delete &a 析构对象,否则将导致内存泄露。

3:  若指针 a 指向的对象是用 new 生成的,则 必须调用 delete a 析构对象,不能调用free (a) ,否则将导致内存泄露。

    

#include <iostream.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
class A{
    int  *s; 
public:
    A (int x) { s=new int[x];cout<<"1"<<endl; }
    ~A (  ) { if (s)    { delete s;   s=0;  }  }
};
void main ( )   {
    A  x (3),   &r=x;
    cout<<"kk"<<endl; // 和r无关
    A &p=*new A (5);
    A  *q=new A (9);
    delete  &p;       //调用 delete &p 析构
    delete     q;     //调用 delete q 析构

}

      

posted on 2012-12-19 19:45  一把刷子  阅读(117)  评论(0编辑  收藏  举报