c ++矢量行为

时间:2017-10-23 00:57:28

标签: c++ c++11 vector

这是我发现的向量问题的一个小例子。你在向量内推送的对象越多,得到的构造函数和析构函数语句就越多。我期待在向量中推送一个对象时只有一个副本,但看起来在向量内部发生了移位复制。

            #include <iostream>
            #include <vector>
            using namespace std;

            class What
            {
                int i;

            public:
                What(int inter) : i(inter) {}
                What(const What &w) : i(w.i)
                {
                    static int a = 1;
                    cout << "i am constructor # " << a << "; with value i = " << i << endl;
                    ++a;
                }
                ~What()
                {
                    cout << "i am destructor #" << i << endl;
                }
            };

            class Whatever
            {
                vector<What> w;

            public:
                void push(What &what)
                {
                    w.push_back(what);
                }
            };

            int main()
            {
                What w1{1};
                What w2{2};
                What w3{3};

                Whatever ever;
                ever.push(w1);
                ever.push(w2);
                ever.push(w3);
            }

结果:

  

我是构造函数#1;值i = 1

     

我是构造函数#2;值i = 2

     

我是构造函数#3;值i = 1

     

我是析构者#1

     

我是构造函数#4;值i = 3

     

我是构造函数#5;值i = 1

     

我是构造函数#6;值i = 2

     

我是析构者#1

     

我是析构者#2

     

我是析构者#1

     

我是析构者#2

     

我是析构者#3

     

我是析构者#3

     

我是析构者#2

     

我是析构者#1

0 个答案:

没有答案