关于new申请动态空间时调用构造、析构函数
2013-05-03 11:02
253 查看
先有一道小填空题开说:
有如下定义语句:MyClass *p[10], 则当指针数组p离开它的作用域时, 系统自动调用析构函数()次。 答案无疑是——0次。
这里只是定义了指针, 并没有为其指定指向的对象,没有构造所以也就谈不上析构。
若使用了new申请动态空间就不同了,上面是指针数组,下面以单独的指针说明一下:
运行结果:
那么, 既然执行了构造函数, 那就意味了arrSingle 就必然已经是对象数组了。像对象那么使用它, 肯定没问题:
运行结果:
有如下定义语句: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; }
运行结果:
相关文章推荐
- 读书笔记《Effective c++》 条款09 绝不在构造和析构函数中调用virtual函数
- C++箴言:避免构造或析构函数中调用虚函数 zz
- C++中关于构造函数调用次序的一道经典例题及对虚函数构造顺序的理解
- 避免构造/析构函数调用虚函数
- 类 构造 析构函数 调用顺序/ 复制(拷贝)构造&&赋值函数
- 049day(构造和析构函数的调用时机,递归例题(四则运算表达式求值)的学习)
- C++ 构造/析构函数中调用虚函数的问题
- <C/C++> 构造和析构函数中调用虚函数
- C++-不要在构造和析构函数中调用虚函数
- 由一道面试题引发的“血案”(静态变量,虚函数,构造/析构函数调用顺序等)
- 虚函数被类的构造析构函数和成员函数调用虚函数的执行过程
- 避免构造/析构函数调用虚函数(转)
- 关于c++显示调用析构函数的陷阱
- 绝不在构造和析构函数中调用 virtual 函数
- 继承中的构造和析构 继承和组合混搭情况下,构造函数、析构函数调用顺序研究
- 关于构造函数和析构函数的隐式调用
- 全局对象和函数内静态对象调用构造析构函数差异
- 编写高质量代码——避免在构造析构函数中调用虚函数
- 条款9:绝不要在构造以及析构函数中调用虚函数
- C++对象数组调用构造/析构函数的方法