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的

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

图片说明

忘记图片了。抱歉

还有消息可能还没输出,你的程序就退出来了。单独封装一个函数测试输出。

还有一个就是有关返回值优化(这是编译器的)