С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33

Копирующий/перемещающий оператор и конструктор

24.06.2019, 13:59. Показов 2082. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне вообщем надо сделать копирующие и перемещающие операторы присваивания и конструкторы.Я сделал,но всё работает совсем не так,как ожидалось!Подскажите пожалуйста,что не так или укажите на мои ошибки.Заранее спасибо!
Вот часть кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
arr(const arr&old)
    {
        mas = old.mas;
        size = old.size;
    }
    arr(const arr&&old)
    {   
        delete[] mas;
        mas = old.mas;
        size = old.size;
        old.mas = nullptr;
        delete old.size;
    }
    arr operator =(arr &obj)
    {
        delete[] mas;
        mas = obj.mas;
        size = obj.size;
        return *this;
    }
    arr & operator =(arr &&obj)
    {
        delete[] mas;
        mas = obj.mas;
        size = obj.size;
        obj.mas = nullptr;
        delete obj.size;
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2019, 13:59
Ответы с готовыми решениями:

Перемещающий конструктор и оператор перемещающего присваивания
Правильно у меня написаны перемещающий конструктор и оператор присваивания? И исправьте ошибку в операторе "ссылка rvalue не может...

Создать копирующий конструктор для класса матрицы и перегрузить оператор <<
Пытаюсь создать копирующий конструктор для класса матрицы и перегрузить оператор &lt;&lt; class Matrix { protected: int **mat;...

Перемещающий конструктор
Можете привести пример реализации перемещающего конструктора?

9
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
24.06.2019, 15:54
Лучший ответ Сообщение было отмечено Oleg_cpp как решение

Решение

Цитата Сообщение от Oleg_cpp Посмотреть сообщение
!Подскажите пожалуйста,что не так или укажите на мои ошибки.Заранее спасибо!
Вот часть кода:
Цитата Сообщение от Oleg_cpp Посмотреть сообщение
arr operator =(arr &obj)
* * {
* * * * delete[] mas;
* * * * mas = obj.mas;
* * * * size = obj.size;
* * * * return *this;
* * }
Здесь надо arr &operator =(const arr &obj) тогда получится оператор копирования

Добавлено через 1 минуту
Ну и вот так - mas = obj.mas;, копировать нельзя. Ты копируешь указатели, а надо выделить новую память под mas и скопировать туда содержимое obj.mas

Добавлено через 6 минут
А вообще - сделай метод swap. Тогда достаточно будет реализовать только конструктор копирования - всё остальное - move-конструктор/оператор и оператор копирования легко реализуются через swap
1
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33
28.06.2019, 19:01  [ТС]
Премного благодарен)
0
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33
29.06.2019, 15:21  [ТС]
Прошу прощения,но у меня уточняющий вопрос.Копировать массив в другой надо циклом или чтобы указатель теперь указывал на область памяти с массивом?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.06.2019, 16:36
Цитата Сообщение от Oleg_cpp Посмотреть сообщение
Прошу прощения,но у меня уточняющий вопрос.Копировать массив в другой надо циклом или чтобы указатель теперь указывал на область памяти с массивом?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
arr(const arr &src) 
: mas(src.size? new ???????[src.size]: nullptr) //Какой тип у mas?
, size(src.size)
{
    std::copy(src.mas, src.mas + src.size, mas);
}
 
arr(arr &&src) noexcept//move-конструктор
: mas(nullptr) 
, size(0)
{
    swap(src);
}
 
void swap(arr& src) noexcept
{
    std::swap(mas, src.mas);
    std::swap(size, src.size);
}
2
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33
29.06.2019, 16:50  [ТС]
Спасибо большое,а без noexcept как-то обойтись можно?(просто мы его еще не проходили)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.06.2019, 16:54
Цитата Сообщение от Oleg_cpp Посмотреть сообщение
Спасибо большое,а без noexcept как-то обойтись можно?(просто мы его еще не проходили)
Можно, но не нужно. Исключения проходили, throw-catch?
0
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33
29.06.2019, 17:04  [ТС]
Нет,еще до этого не дошли
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.06.2019, 17:08
Цитата Сообщение от Oleg_cpp Посмотреть сообщение
Нет,еще до этого не дошли
Ну, тогда убери
0
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33
29.06.2019, 17:11  [ТС]
Спасибо большое,вы мне очень помогли)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.06.2019, 17:11
Помогаю со студенческими работами здесь

перемещающий конструктор
Добрый день! Набрасал простейший класс: #include &lt;iostream&gt; using namespace std; class A{ public: ...

Перемещающий конструктор по умолчанию
Есть класс содержащий в себе std::unique_ptr. Так как unique_ptr не умеет копироваться, копирующего конструктора у класса быть не может. Но...

Перемещающий конструктор по умолчанию
Генерируется ли конструктор перемещения для простых структур? Например в таком вариант обмен объектами при сортировке будет производится...

Перемещающий оператор присваивания
В каких ситуациях вызывается перемещающий оператор присваивания, я нашел только один. int main() { Test t1{}; t1 =...

Копирующий конструктор
Здравствуйте, кто нибудь может сказать, почему при создании копирующего конструктора нужно указывать ссылку на объект? #include...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru