ilbn20 2015-04-26 03:19 采纳率: 28.6%
浏览 1523

STL构造析构输出问题

#include
#include
using namespace std;
class A {
private :
int nId;
public:

A(int n) { 
    nId = n; 
    cout << nId << " contructor" << endl; 
};
A( const A & a ) {
    nId = a.nId ;
    cout << nId << " copy constructor" << endl;
}

~A( ) {
    cout << nId << " destructor" << endl;
}

};
main()
{
vector vp;
vp.push_back(new A(1));
vp.push_back(new A(2));
vector
v;
v.push_back (3);
}

1 contructor
2 contructor
3 contructor
3 copy constructor
3 destructor
3 destructor
求问复制构造函数怎么调用的,还有析构函数为何不输出1,2的

  • 写回答

4条回答 默认 最新

  • yu_sn0w 2015-04-26 03:59
    关注

    我自己做了一个测试。建议楼主不要在main测试,自己写一个函数测试。可以体现更好体现生命周期。
    我做了个类似测试。看图片:
    第一步:调用构造函数,无疑问;
    第二步:push 操作会调用拷贝构造;
    第三步:new 调用构造函数;
    第四步:容器vec需要换空间(这个可能和vector具体实现有关),故新拷贝构造一个;
    第五步:接第四步,析构原来vec中的对象;拷贝构造2;
    第六步:构造3,拷贝构造3,无疑问;
    第七步:析构临时对象3;
    第八步:vec_析构,即3析构;
    第九步:a析构,即析构1;
    第十步:vec析构,即析构1,2;
    由此也可见。假如需要经常Push数据。vector会调用多次构造析构,

    评论

报告相同问题?

悬赏问题

  • ¥15 用三极管设计一个单管共射放大电路
  • ¥20 fluent无法启动
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架