I'm studying in what order constructors and destructors get called and I wrote that code:
#include <string>
#include <vector>
#include <iostream>
using namespace std;
class Corgi {
    private:
        string nickname;
    public:
        Corgi(): nickname("unknown") {
            cout << "Corgi object CREATED. Name: unknown" << endl;
        }
        Corgi(const string& _nickname): nickname(_nickname) {
            cout << "Corgi object CREATED.   \tName: " + nickname << endl;
        }
        string getName() { return nickname; }
        ~Corgi() { cout << "Corgi object DESTROYED. \tName: " << nickname << endl; }
};
int main() {
vector<Corgi> zoo;
    for (int i = 0; i < 5; i++)
        zoo.push_back(Corgi("Zoo Corgi_" + to_string(i)));
    return 0;
}
The output I get:
Corgi object CREATED.       Name: Zoo Corgi_0
Corgi object DESTROYED.     Name: Zoo Corgi_0
Corgi object CREATED.       Name: Zoo Corgi_1
Corgi object DESTROYED.     Name: Zoo Corgi_0
Corgi object DESTROYED.     Name: Zoo Corgi_1
Corgi object CREATED.       Name: Zoo Corgi_2
Corgi object DESTROYED.     Name: Zoo Corgi_0
Corgi object DESTROYED.     Name: Zoo Corgi_1
Corgi object DESTROYED.     Name: Zoo Corgi_2
Corgi object CREATED.       Name: Zoo Corgi_3
Corgi object DESTROYED.     Name: Zoo Corgi_3
Corgi object CREATED.       Name: Zoo Corgi_4
Corgi object DESTROYED.     Name: Zoo Corgi_0
Corgi object DESTROYED.     Name: Zoo Corgi_1
Corgi object DESTROYED.     Name: Zoo Corgi_2
Corgi object DESTROYED.     Name: Zoo Corgi_3
Corgi object DESTROYED.     Name: Zoo Corgi_4
Corgi object DESTROYED.     Name: Zoo Corgi_0
Corgi object DESTROYED.     Name: Zoo Corgi_1
Corgi object DESTROYED.     Name: Zoo Corgi_2
Corgi object DESTROYED.     Name: Zoo Corgi_3
Corgi object DESTROYED.     Name: Zoo Corgi_4
This output baffles me completely.
- Why does Zoo Corgi_0 gets destroyed 5 times if it gets created only once?
 - Why does Zoo Corgi_0 gets created and immediately destroyed before even Zoo Corgi_1 is created?
 - What makes C++ destroy Zoo Corgi_0 again after creating Zoo Corgi_1?
 
In the output I expected 10 lines: 5 lines for creating Zoo Corgis from 0 to 4 and 5 lines for destructing these objects. But apparently the thing are much more complicated.
I appreciate any help.