在向量中执行push_back时多次调用了复制构造函数

时间:2018-07-26 10:44:29

标签: c++ stl

#include <stdio.h>
#include <string>
#include <iostream>
#include <vector>

using namespace std;

class MyInt
{
    int* a;
    int length;

  public:
     MyInt();
     explicit MyInt(int length);
     MyInt(const MyInt&);
     MyInt& operator=(const MyInt&);
    ~MyInt();
};

// MyInt.cpp
MyInt::MyInt():a(NULL)
{
    std::cout <<"Default Constructor"<<std::endl;
}

MyInt::MyInt(int size):length(size),a(new int[size])
{
         std::cout<<"Parameterized Constructor"<<std::endl;
}

MyInt::MyInt(const MyInt& obj)
{

    std::cout<<"Copy Constructor called"<<std::endl;
    length = obj.length;
    a = new int[length];
}

MyInt& MyInt::operator=(const MyInt& obj)
{
    if(this != &obj)
    {
         if(NULL != a)
         delete [] a;

         length = obj.length;
         a = new int[length];
    }
    return *this;
}

void printVector(std::vector<MyInt>& v1)
{
   // for(int* num : v1)
    //std:cout << num <<" ";

    //std::cout<<endl;
}

MyInt::~MyInt()
{
    if(NULL != a)
    delete [] a;
}

int main()
{


    std::vector<MyInt> v1,v2;

    for(int i = 0 ; i < 5 ; ++i)
    {
        // v1.push_back(MyInt(i+1));
        MyInt obj(i+1);
        v1.push_back(obj);
    }

    //Delete the heap before calling vector clear


    return 0;
}

我期望的产出是:

参数化构造函数
复制构造函数称为 参数化构造函数
复制构造函数称为 参数化构造函数
复制构造函数称为 参数化构造函数
复制构造函数称为 参数化构造函数
复制构造函数称为

实际输出是

参数化构造函数
复制构造函数称为
参数化构造函数
复制构造函数称为
复制构造函数称为
参数化构造函数
复制构造函数称为
复制构造函数称为
复制构造函数称为
参数化构造函数
复制构造函数称为
参数化构造函数
复制构造函数称为
复制构造函数称为
复制构造函数称为
复制构造函数称为
复制构造函数称为


这个隐藏的真相是什么,有人可以帮我更好地理解吗?

0 个答案:

没有答案