Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 1
Регистрация: 03.09.2010
Сообщений: 12

Оператор присвоения копии для класса, действующего как значения

11.02.2017, 12:39. Показов 1074. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветсвую.
Увидел в книге Липпмана, "Язык программирования С++. Базовый курс", определение оператора присвоения для класса, действующего как значения. Приведу код из книги:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class HasPtr {
public:
    // declaration of constructor, destructor and assignment operator
 
private:
    string *ps;
    int i;
};
 
HasPtr &HasPtr::operator=(const HasPtr &rhs) {
    auto newps = new string(*(rhs.ps));
    delete ps;
    ps = newps;
    i = rhs.i;
    return *this;
}
И у меня возник вопрос, почему нельзя сделать проще:
C++
1
2
3
4
5
HasPtr &HasPtr::operator=(const HasPtr &rhs) {
    *ps = *(rhs.ps);
    i = rhs.i;
    return *this;
}
Так даже не нужно париться с порядком следования инструкций в случае присвоения самому себе. Или я, возможно, упускаю какую-то деталь?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2017, 12:39
Ответы с готовыми решениями:

Оператор присвоения для класса
Никак не получается написать оператор присвоения. Помогите пожалуйста! #include <iostream> #include <conio.h> using...

Ошибка при попытке присвоения значения переменной класса
Что то не пойму опять что не так :-( есть некий класс, описанный так: TEText=class(TObject) // объект текст ELines:Tlist;...

Выражение для действующего значения тока
Катушка с параметрами L и В включена параллельно конденсатора с емкостью С. Напряжение на зажимах цепи U = Um sinwt. Напишите выражение для...

1
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
11.02.2017, 13:40
Вообще можно, тогда очисткой памяти и выделением новой занимается оператор присваивания std::string. Я ещё добавил if(this != &rhs), чтоб не делать лишних действий при самоприсваивании.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.02.2017, 13:40
Помогаю со студенческими работами здесь

Выражение для действующего значения напряжения
1. Напишите выражение для действующего значения напряжения в цепи, которое состоит из Х последовательно соединенных элементов R и I, если в...

Для чего ещё может быть нужен конструктор класса кроме присвоения полям класса начальных значений?
Для чего ещё может быть нужен конструктор класса кроме присвоения полям класса начальных значений?

Конструктор перемещения и оператор присвоения для двусвязного списка
Добрый день. Помогите разобраться в вопросом: пишу реализацию двусвязного списка, хотел бы разобраться с конструктором перемещения и...

Выражение для действующего значения тока и коэффициента мощности цепи
в круг включены последовательно две катушки с параметрами R1, XL1, R2, XL2 и конденсатор с емкостью С. Действующее значение напряжения U...

Как правильно перегрузить оператор присвоения под параметр типа AnsiString
Вот делаю домашку, и проблема, моя строка ждет интов, а не самих строк AnsiString, Builder 6 стоит Вот сами класы: class CMas {...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru