Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 100
1

Явное определение конструктора копирования и оператора присваивания

11.08.2017, 13:29. Просмотров 870. Ответов 3
Метки нет (Все метки)

Объясните, пожалуйста, нужно ли явно определять конструктор копирования (**) и оператор присваивания (***) для указанного определения класса и почему:
C++
1
2
3
4
5
6
7
8
9
10
class R
{
private: string st;
public:
     R() : st(" ");
     R(const char * s) : st(s) {}
     R(const R & r) { st = r.st; }   // **
     ~R() {}
     R & operator=(const R & r);  // ***
}
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2017, 13:29
Ответы с готовыми решениями:

Посмотрите описание конструктора копирования и оператора присваивания с ними все в порядке? После функции add теряются данные
class Person{ char *name; int age; char *floor; char *phone; public: Person(){...

Как разделить перегрузку присваивания и конструктора копирования?
Знакомлюсь с перегрузками присваивания и конструктора копирования. Есть класс class Data { int...

Конструктор копирования и перегрузка оператора присваивания
Здравствуйте! Возникла следующая проблема: не могу перегрузить оператор присваивания и сделать...

Перегрузка конструктора копирования и оператора присвоения
Всем привет, сразу к делу. После прочтения 11 главы Лафоре столкнулся с такой бедой как понятие...

3
485 / 200 / 68
Регистрация: 27.05.2016
Сообщений: 532
11.08.2017, 13:59 2
Можно не определять:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class R
{
    std::string st;
 
public:
    R() : st(" ") {}
    R(const char * s) : st(s) {}
    //R(const R & r) { st = r.st; }   // **
    //~R() {}
    //R & operator=(const R & r);  // ***
 
    void print() const {std::cout << st << "\n";}
};
 
int main()
{
    R r1("Hello"), r3;
    R r2(r1);
 
    r2.print();
    r3 = r1;
    r3.print();
}
0
Форумчанин
Эксперт CЭксперт С++
8152 / 5002 / 1436
Регистрация: 29.11.2010
Сообщений: 13,460
11.08.2017, 15:01 3
Лучший ответ Сообщение было отмечено pro_mary как решение

Решение

Цитата Сообщение от pro_mary Посмотреть сообщение
конструктор копирования (**) и оператор присваивания (***)
Есть такое правило трёх.

Конструктор копирования, оператор присваивания и деструктор стоит использовать тогда, когда в классе ведётся работа с динамической памятью или другое управление эксклюзивными ресурсами.

В вашем примере управление памятью инкапсулировано в std::string, ручное управление памятью не требуется. Поэтому подойдёт сгенерированным компилятором конструктор копий, оператор копирующего присваивания и деструктор.
0
Заблокирован
14.08.2017, 04:42 4
pro_mary, стоит определить явно как = default;.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2017, 04:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Определение конструктора копирования для производного класса
Как написать определение конструктора копирования для производного класса, а именно копировании...

В чём отличия конструктора копирования и конструктора перемещения? Где и как их нужно использовать?
Помогите разобраться в копирующем и перемещающем конструкторах. В чём их существенное отличие и...

Избыточное копирование объекта при реализации оператора умножения и оператора присваивания
Есть класс работы с матрицами. Есть операция умножения матриц, описанная как оператор класса. В...

Неправильная работа оператора присваивания после работы оператора суммирования
Доброго времени суток. У меня есть класс вектор class TVector {//ewde public: TVector();...

Конструктор копирования, присваивания
Пусть есть класс class some{ private : int a ; }; Перегрузить оператор &quot;=&quot; можно так ...

Конструктор присваивания или копирования
Есть программа. В ней есть класс стэк. Нужно написать оператор копирования ИЛИ присваивания....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.