构造、析构函数的调用顺序及VC6.0和VC2010中实现的差别
2013-05-24 11:31
375 查看
构造、析构函数的调用顺序及VC6.0和VC2010中实现的差别
VC6.0和VC2010在初始化数组的时候存在差别:对于
在6.0中这条语句是先利用默认构造函数创建一个临时对象,然后三次调用复制构造函数,将此临时对象赋给数组中的值,再调用析构函数撤销临时对象;
在2010中,这条句是先利用默认构造函数创建一个临时对象,然后调用复制构造函数将此临时对象赋给数组中的一个值, 再调用析构函数撤销临时对象;再反复这个过程初始化数组的另外两个值。
详细代码如下:
VC6.0中的运行结果:
VC2010中的运行结果:
VC6.0和VC2010在初始化数组的时候存在差别:对于
vector<Item_base> ibvec( 3 );
在6.0中这条语句是先利用默认构造函数创建一个临时对象,然后三次调用复制构造函数,将此临时对象赋给数组中的值,再调用析构函数撤销临时对象;
在2010中,这条句是先利用默认构造函数创建一个临时对象,然后调用复制构造函数将此临时对象赋给数组中的一个值, 再调用析构函数撤销临时对象;再反复这个过程初始化数组的另外两个值。
详细代码如下:
#include <iostream> #include <vector> using namespace std; class Item_base { public: Item_base() { cout << "Item_base()" << endl; } Item_base( const Item_base& ) { cout << "Item_base( const Item_base& )" << endl; } Item_base& operator = ( const Item_base &rhe ) { cout << "operator = ( const Item_base& )" << endl; return *this; } ~Item_base() { cout << "~Item_base()" << endl; } }; void func1( Item_base obj ) { } void func2( Item_base &obj ) { } Item_base func3() { Item_base obj; return obj; } int main() { Item_base ib; func1( ib ); func2( ib ); ib = func3(); Item_base *p = new Item_base; vector<Item_base> ibvec( 3 ); delete p; return 0; }
VC6.0中的运行结果:
Item_base() Item_base( const Item_base& ) ~Item_base() Item_base() Item_base( const Item_base& ) ~Item_base() operator = ( const Item_base& ) ~Item_base() Item_base() Item_base() Item_base( const Item_base& ) Item_base( const Item_base& ) Item_base( const Item_base& ) ~Item_base() ~Item_base() ~Item_base() ~Item_base() ~Item_base() ~Item_base()
VC2010中的运行结果:
Item_base() Item_base( const Item_base& ) ~Item_base() Item_base() Item_base( const Item_base& ) ~Item_base() operator = ( const Item_base& ) ~Item_base() Item_base() Item_base() Item_base( const Item_base& ) ~Item_base() Item_base() Item_base( const Item_base& ) ~Item_base() Item_base() Item_base( const Item_base& ) ~Item_base() ~Item_base() ~Item_base() ~Item_base() ~Item_base() ~Item_base()
相关文章推荐
- c++学习笔记4,调用派生类的顺序构造和析构函数(一个)
- 图像配准实现代码VC6.0移植VC2010问题总结
- 子类构造、析构时调用父类的构造、析构函数顺序
- 一道面试题(静态变量,虚函数,构造/析构函数调用顺序等)
- 由一道面试题引发的“血案”(静态变量,虚函数,构造/析构函数调用顺序等)
- 拷贝构造,构造函数,析构函数的调用顺序
- 基类构造析构函数、子类构造析构函数和子类成员变量构造析构函数的调用顺序
- 类 构造 析构函数 调用顺序/ 复制(拷贝)构造&&赋值函数
- 基类派生类构造析构函数调用顺序、成员初始化和销毁顺序
- 继承中的构造和析构 继承和组合混搭情况下,构造函数、析构函数调用顺序研究
- 基类构造析构函数、子类构造析构函数和子类成员变量构造析构函数的调用顺序
- 子类调用父类构造和析构函数的顺序
- C++ 子类调用父类构造和析构函数的顺序
- c++继承中析构函数的调用顺序
- 在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口
- C++,类的构造与析构函数,进栈出栈 以及堆上的执行 顺序 语法练习
- 总结c++类的构造函数 拷贝构造函数 析构函数 赋值运算符重载的特点以及函数调用顺序
- vc++ 调用Word 实现转换格式
- C++中构造函数与析构函数的调用顺序详解
- J2ME中destroyApp()、pauseApp()、startApp()、构造方法的调用顺序