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

Зачем нужен такой конструктор: X(const X &) = delete;

07.02.2021, 00:21. Показов 2103. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,
подскажите пожалуйста что значит такой конструктор в структуре и как это можно использовать (если можно с небольшим примером).
Заранее спасибо!

C++
1
2
3
struct X {
                X(const X &) = delete;
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2021, 00:21
Ответы с готовыми решениями:

Зачем нужны const и & в коде
Здравствуйте. Имеется данный код. #include <iostream> class Dollars { private: int m_dollars; public:

Зачем нужен const?
Добрый вечер, разбираюсь с классом стек, подскажите пожалуйста, для чего здесь нужен const? bool IsEmpty() const { return...

Зачем нужен initonly, если есть const?
САБЖ. Возможно нубовские вопросы, зарание спасибо :) 1. Зачем нужен initonly если есть const 2. как правильно и в чем разница...

9
 Аватар для VLaDoS_2001a
319 / 216 / 114
Регистрация: 14.05.2020
Сообщений: 890
07.02.2021, 00:41
Лучший ответ Сообщение было отмечено wertoz как решение

Решение

wertoz, это делается, чтобы не создавался конструктор копирования по умолчанию
C++
1
X(const X &) = delete;

C++
1
2
3
4
5
6
7
8
class A
{
    public:
    A(int b): b(b){}
    A(const A& a):b(a.b){}
    private:
    int b;
};
2
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,212
07.02.2021, 00:55
Лучший ответ Сообщение было отмечено wertoz как решение

Решение

Цитата Сообщение от wertoz Посмотреть сообщение
что значит такой конструктор в структуре
Это значит, что автор этого класса захотел запретить копирование этого класса. Обычно в компании с таким конструктором будет идти и запрещенный копирующий оператор присваивания.

Если вы попытаетесь выполнить копирования при помощи такого конструктора, компилятор выдаст вам ошибку компиляции.

Цитата Сообщение от wertoz Посмотреть сообщение
и как это можно использовать
Это конструктор нельзя использовать. Для этого он и объявлен таким способом.
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
07.02.2021, 01:00
Цитата Сообщение от wertoz Посмотреть сообщение
подскажите пожалуйста что значит такой конструктор в структуре и как это можно использовать (если можно с небольшим примером).
Защита от копирования, чтоб нельзя было писать X dst=src. Зачем вам это может понадобиться - отдельный вопрос. Например, каждое X связано с внешним устройством и одно устройство должно быть представлено одним X. А вы тут вдруг копировать устройства полезли.
1
5 / 5 / 2
Регистрация: 27.11.2016
Сообщений: 93
07.02.2021, 09:26
Что это из себя представляет вам написали уже
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это значит, что автор этого класса захотел запретить копирование этого класса. Обычно в компании с таким конструктором будет идти и запрещенный копирующий оператор присваивания.
Если вы попытаетесь выполнить копирования при помощи такого конструктора, компилятор выдаст вам ошибку компиляции.
А я советую вам прочесть про использование ключевого слова delete
0
 Аватар для oldnick85
36 / 34 / 10
Регистрация: 15.07.2017
Сообщений: 128
07.02.2021, 11:42
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Обычно в компании с таким конструктором будет идти и запрещенный копирующий оператор присваивания.
Даже больше, для таких случаев есть правило пяти
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.02.2021, 12:45
Цитата Сообщение от karpinochkin Посмотреть сообщение
А я советую вам прочесть про использование ключевого слова delete
ты смешной.

Цитата Сообщение от oldnick85 Посмотреть сообщение
Даже больше, для таких случаев есть правило пяти
в данном случае, правило пяти - избыточно.

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

о правиле пяти имеет смысл говорить только и только в тех случаях,
когда тебе нужно, что бы можно было перемещать объект.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,212
07.02.2021, 13:39
Цитата Сообщение от oldnick85 Посмотреть сообщение
Даже больше, для таких случаев есть правило пяти
Непонятно, в каком плане вы предлагаете привязать сюда Правило Пяти. Правило Пяти - "аддитивное" правило. Оно говорит, что если вы написали хотя один из пяти специальных методов, то скорее всего вам следует написать их все.

В данном же случае у нас "субтрактивная" ситуация: из того, что вы запретили копирование никак не следует, что нужно ещё и запрещать перемещение. Запрет копирования никак не подразумевает запрет перемещения. Перемещаемые, но не копируемых объекты - совершенно нормальное явление.
0
 Аватар для oldnick85
36 / 34 / 10
Регистрация: 15.07.2017
Сообщений: 128
07.02.2021, 18:36
Правило пяти часто оказывается избыточным, но оно как раз и необходимо для ЯВНОГО определения стратегии владения, запрет конструктора - это тоже определение (декларация).
В данном случае запрещён конструктор копирования, а вот оператор копирования не запрещён и явно также не определён. Так должно быть или программист просто забыл про него? Правило пяти как раз и требует явного определения, чтобы не получалось таких неоднозначностей и возможных ошибок.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,212
07.02.2021, 20:53
Цитата Сообщение от oldnick85 Посмотреть сообщение
В данном случае запрещён конструктор копирования, а вот оператор копирования не запрещён и явно также не определён.
Я думаю, что мы в данном случае видим только огрызок кода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2021, 20:53
Помогаю со студенческими работами здесь

Зачем нужен const при перегрузке оператора
Следующий код описывает класс СТРОКА string_. При перегрузке оператора '=' string_& string_::operator=(const string_ &str) ...

Зачем нужен конструктор?
Всем доброго дня. Ребят такая проблема объясните мне на пальцах для чего нужен конструктор в классах. Я уже столько толмудов перерыл но...

Зачем нужен конструктор переноса?
Зачем нужен конструктор переноса если тоже самое можно реализовать в обычном конструкторе копирования. Ну вот пример: ...

Зачем нужен конструктор копирования?
Всем привет. Тут проблема я не понимаю зачем нужен конструктор копирования. Ну точнее я понимаю, зачем он, но если можно просто для второго...

Зачем нужен пустой конструктор в базовом классе?
после добавления в базовый класс конструктора с 3-мя параметрами, в производных классах стала выходить ошибка"Отсутствует аргумент,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru