Конструктор копирования на динамических объектах класса

Есть класс "факультет", нужно создать конструктор копирования для обычных и динамических объектов. Для обычных конструктор работает без привязки, а вот для "динамических" два объекта сливаются в один. Код для проверки ниже.

#include <iostream>
#include <windows.h>
using namespace std;

class Faculty
{
public:
    // constructors & destructor

    // constructor without variables
    Faculty() {
        number = NULL;
    }
    // constructor to set fields
    Faculty(int faculty_number) {
        number = faculty_number;
    }
    // copy constructor
    Faculty(const Faculty& ref_point) {
        number = ref_point.number;
    }

    // destructor
    ~Faculty() {
        std::cout << " ~ class object has been destroyed\n";
    }

    // set & get methods
    void set_number(int faculty_number) {
        number = faculty_number;
    }
    int get_number() {
        return number;
    }
    

    // class data output
    void show_data() {
        std::cout << " ~ Faculty number = " << number << "\n";
    }

private:
    // fields 
    int number; 
};

int main()
{
    // for localization
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);

    std::cout << "Задаем значение st_Obj1 и копируем его конструктором в новый st_Obj2\n";
    Faculty st_Obj1(1);
    Faculty st_Obj2 = st_Obj1;
    std::cout << "st_Obj1.number = ";
    st_Obj1.show_data();
    std::cout << "st_Obj2.number = ";
    st_Obj2.show_data();
    std::cout << "Изменяем поле st_Obj1 и проверяем все объекты на изменения\n";
    st_Obj1.set_number(2);
    std::cout << "st_Obj1.number = ";
    st_Obj1.show_data();
    std::cout << "st_Obj2.number = ";
    st_Obj2.show_data();
    std::cout << "Задаем значение dynamic_Obj1 и копируем его конструктором в новый dynamic_Obj2\n";
    Faculty* dynamic_Obj1 = new Faculty(1);
    Faculty* dynamic_Obj2 = dynamic_Obj1;   // это не правильно, усвоил
    // Faculty* dynamic_Obj2 = new Faculty() <- но как тогда вызвать конструктор копирования
    std::cout << "dynamic_Obj1.number = ";
    dynamic_Obj1->show_data();
    std::cout << "dynamic_Obj2.number = ";
    dynamic_Obj2->show_data();
    std::cout << "Изменяем поле dynamic_Obj1 и проверяем все объекты на изменения\n";
    dynamic_Obj1->set_number(2);
    std::cout << "dynamic_Obj1.number = ";
    dynamic_Obj1->show_data();
    std::cout << "dynamic_Obj2.number = ";
    dynamic_Obj2->show_data();

    delete dynamic_Obj1;
    delete dynamic_Obj2;
    return 0;
}

Только два объекта освобождают память до появления ошибки. Не понимаю как создать "конструктор копирования" во втором случае.

консоль


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

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

Вы, наверное, хотите второй объект через new, но копию первого?

Faculty* dynamic_Obj1 = new Faculty(1);
Faculty* dynamic_Obj2 = new Faculty(*dynamic_Obj1);  
→ Ссылка