std :: manejo de memoria vectorial

Traté de buscar en Google y buscar una respuesta a mi pregunta, pero no pude encontrar ninguna explicación válida, por lo tanto, estoy publicando mi pregunta aquí. El siguiente es mi código de muestra y salida:

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

typedef struct Node{
    int data;
    Node(){
        data = 0;
        std::cout << "Node created. " << this <<'\n';
    }
    ~Node(){
        data = 0;
        std::cout << "Node destroyed. " << this <<'\n';
    }
} Node;

int main() {
    std::vector<Node> vec;
    for(int i = 0; i < 2 ; i++)
       vec.push_back( *(new Node));
    return 0;
}
Salida:
Node created. 0x9e0da10
Node created. 0x9e0da30
Node destroyed. 0x9e0da20
Node destroyed. 0x9e0da40
Node destroyed. 0x9e0da44

¿Por qué hay una destrucción adicional y por qué los objetos creados son diferentes del objeto destruido?

Respuestas a la pregunta(4)

Su respuesta a la pregunta