Конструктор копирования на динамических объектах класса
Есть класс "факультет", нужно создать конструктор копирования для обычных и динамических объектов. Для обычных конструктор работает без привязки, а вот для "динамических" два объекта сливаются в один. Код для проверки ниже.
#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);
