...
my_class(my_class const &) = delete;
...
};
видел, как присваивают delete и к простым методам и к конструкторам и в случае перегрузки операторов...
что оно делает?
и почему тут еще и ссылке my_class не дается имя переменной? как обращаться к этой ссылке?
Это явное запрещение конструктора. В данном случае - конструктора копирования
Имя параметру не даётся, потому что этот параметр не используется и его имя можно при этом не указывать
нельзя вызвать конструктор? а зачем такое юзать тогда для обычных методов?
че? тогда зачем его передавать....
Его и не передают.
Обычные методы тут ни при чём пока.
с каждым твоим ответом понимаю все меньше😅 тогда зачем это писать? почему б не написать my_class();?
ClassName(const ClassName &) это конструктор копирования. delete может быть использован в данном контексте например чтобы избавится от неявного дефолтного конструктора копирования. Если не указывать параметры то ты удалишь дефолтный конструктор
ааааа, понял, спасио)
Конструктор копирования - это другой конструктор, как и конструктор перемещения. Запрещают их чтобы исключить возможность соответствующих манипуляций над объектами. Для понимания могу порекомендовать вам почитать (целиком сначала) некоторые книги. Не обязательно сразу Страуструпа. Берите попроще, примеры в закрепе.
я просто забыл, что есть еще конструктор копирования..... спасибо
для обычных методов - можно "удалить" метод объявленный в родительском классе например. Это может быть полезно если дочерний класс не предоставляет часть функционала базового класса.
С каких пор можно что-то там удалить от родительского класса?
Ну вот = delete это и делает
можно сделать class Base { void Method(); } class Child : public Base { void Method() = delete; }
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
это немного не то делает.
а что оно делает?
Оно удаляет метод из неймспейса класса, в котором ты это пишешь
Так оно само удаляется.
Это обман, оно не удаляется, оно скрывается
Обсуждают сегодня