#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(int x=0):i(x){cout<<"C"<<i;}
~MyClass(){cout<<"D"<<i;}
void SetValue(int val){i=val;}
int GetVal(){return i;}
private:
int i;
};
int main()
{
MyClass *p[3];
int i;
for (i=0;i<3;i++)
{
p[i]=new MyClass(i);
p[i]->SetValue(p[i]->GetVal()*2);
}
for (i=0; i<3; i++)
delete p[i];
cout<<endl;
return 0;
}
运行结果:
阅读想法:
主函数里面定义一个MyClass类的对象*p[];for循环里给*p[]动态分配内存并执行了3次构造函数每次分别输出C0,C1,C2;另*p[]指向SetValue函数,函数的实参是GetVal()*2;在for循环里同样执行三次,三次的值依次为:0,1,2;所以p[i]也就是SetValue里面的值依次:0,2,4;执行完函数后再进入for循环释放掉*p[]的内存,也就是依次析构函数MyClass,所以依次输出的值是D0,D1,D2。