先有一道小填空题开说:
有如下定义语句:MyClass *p[10], 则当指针数组p离开它的作用域时, 系统自动调用析构函数()次。 答案无疑是——0次。
这里只是定义了指针, 并没有为其指定指向的对象,没有构造所以也就谈不上析构。
若使用了new申请动态空间就不同了,上面是指针数组,下面以单独的指针说明一下:
#include<iostream>
using namespace std;
class Test
{
public:
Test()
{
cout<<"构造"<<endl;
}
~Test()
{
cout<<"析构"<<endl;
}
};
void main()
{
cout<<"****************start*********************"<<endl;
Test *arr[10]; //从结果来看, 这里没有调用构造函数
Test * arrSingle;
arrSingle = new Test[2]; //这里调用两次 这样使用,要求必须有默认构造函数
delete []arrSingle; //这里析构两次
cout<<"****************end**********************"<<endl;
}
运行结果:
那么, 既然执行了构造函数, 那就意味了arrSingle 就必然已经是对象数组了。像对象那么使用它, 肯定没问题:
#include<iostream>
using namespace std;
class Test
{
private:
int test;
public:
Test()
{
test = 0;
cout<<"构造"<<endl;
}
~Test()
{
cout<<"析构"<<endl;
}
void print()
{
cout<<"调用成员函数,输出数据成员:"<<test<<endl;
}
};
void main()
{
cout<<"****************start*********************"<<endl;
Test *arr[10];
Test * arrSingle;
arrSingle = new Test[2];
arrSingle[0].print();
delete []arrSingle;
cout<<"****************end**********************"<<endl;
}
运行结果:
转载于:https://www.cnblogs.com/tiny-rogue/archive/2013/05/03/3056249.html