Я пытаюсь понять, как STL обрабатывает вставки объектов.Я понимаю, что STL вызывает конструктор или копию конструкции из временного.
Это код, который я пытаюсь понять:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class A
{
public:
int ObjId;;
A(int id) : ObjId(id)
{
cout << "Constructing object with id: " << ObjId << endl;
}
A(const A& objToCpy)
{
ObjId = objToCpy.ObjId;
cout << "Copying object with id: " << ObjId << endl;
}
~A()
{
cout << "Destructing object with id: " << ObjId << endl;
}
};
int main()
{
std::vector<A> vecOfA;
vecOfA.push_back(A(1));
cout << "....................." << endl << endl;
vecOfA.push_back(A(2));
return 0;
}
Это дает следующий вывод:
Построение объекта с идентификатором: 1
Копирование объекта с идентификатором: 1
Уничтожение объекта с идентификатором: 1
................
Построение объекта с идентификатором: 2
Копирование объекта с идентификатором: 2
Копирование объекта с идентификатором: 1
Уничтожение объекта с идентификатором: 1
Уничтожение объекта с идентификатором: 2
................
Уничтожение объекта с помощьюid: 1
Уничтожение объекта с id: 2
Я могу понять первую вставку.Создается временный объект с ID = 1, который затем копируется, создается и вставляется в вектор.И этот временный затем разрушается.
Однако я не понимаю, почему скопированный объект имеет ID = 0, а не 1.
Что касается второй части, я понятия не имею, что происходит и почему это не так.идентичен первой вставке, за исключением того, что идентификатор отличается.Почему создаются 2 копии объекта, и оба с ID = 0, а не 2.
Кто-нибудь может мне помочь понять это поведение?