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 析构 }