您的位置:首页 > 其它

关于new申请动态空间时调用构造、析构函数

2013-05-03 11:02 253 查看
  先有一道小填空题开说:

有如下定义语句: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;
}


 运行结果:

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: