Двойное освобождение памяти С++

Недавно начал использовать vector в С++, столкнулся с ошибкой:

free(): double free detected in tcache 2 Aborted

Программа написана в целях обучения. Если знаете как эту ошибку исправить, напишите пожалуйста по подробнее, самая главная задача - освободить x.

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

class Obj{
    int *x;
    int y;
public:
    Obj(int x, int y){
        this->x = new int(x);
        this->y = y;
    }
    ~Obj(){delete x;}

    int getX(){return *x;}
    int getB(){return y;}
};

void create(int x, int y, vector <Obj> &v){
    Obj obj(x, y);
    v.push_back(obj);
}

int main(int argc, char const *argv[]){
    vector <Obj> v;

    create(10, 40, v);
    create(1032, 124, v);
    create(4, 2, v);

    for(int i = 0; i < v.size(); i++){
        cout << "X - " << v[i].getX() << endl;
        cout << "Y - " << v[i].getB() << endl << endl;
    }

    return 0;
}

Ответы (1 шт):

Автор решения: Антон

Проблема была решена конструктором копирования, спасибо всем кто помог! :)

(Изменения помечены комментариями)

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

class Obj{
    int *x;
    int y;
public:
    //конструктор копирования
    Obj(const Obj &obj){
        x = new int(*obj.x);
        y = obj.y; 
    }
    Obj(int x, int y){
       this->x = new int(x);
       this->y = y;
    }
    ~Obj(){delete x;}

    int getX(){return *x;}
    int getB(){return y;}
};

void create(int x, int y, vector <Obj> &v){
    Obj obj(x, y);
    v.push_back(obj);
}

int main(int argc, char const *argv[]){
    vector <Obj> v;

    create(10, 40, v);
    create(1032, 124, v);
    create(4, 2, v);

    for(int i = 0; i < v.size(); i++){
        cout << "X - " << v[i].getX() << endl;
        cout << "Y - " << v[i].getB() << endl << endl;
    }

    return 0;
}
→ Ссылка