Все самое полезное для плюсовика и сишника в одном канале.
Как запустить своего ии-агента: https://clc.to/tvpmDQ
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
#WXSSA
Post #6829
1.65K
🍴 Rule of Zero: лучший Fab Four — тот, что ты не писал
Идеальный класс не содержит ни одного из пяти методов. Это не лень — это архитектурный принцип, который снижает количество багов.
🍒 Rule of Zero
Если каждое поле само корректно управляет своим ресурсом (
❗️Почему работает: почленное перемещение вызовет move у каждого поля.
❗️ Ключевое условие — не объявлять деструктор. И
✏️ Твои классы владеют new/delete напрямую — или прячут их в unique_ptr и живут по Rule of Zero?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Идеальный класс не содержит ни одного из пяти методов. Это не лень — это архитектурный принцип, который снижает количество багов.
🍒 Rule of Zero
Если каждое поле само корректно управляет своим ресурсом (
std::string, std::vector, std::unique_ptr), то классу-агрегату не нужны свои Fab Four. Компилятор сгенерирует правильные почленные версии.struct User {
std::string name;
std::vector<int> scores;
std::unique_ptr<Db> conn;
};
// move + dtor — сгенерированы, корректны и БЕСПЛАТНЫ
// copy — корректно УДАЛЁН: unique_ptr некопируем → User тоже (move-only тип)❗️Почему работает: почленное перемещение вызовет move у каждого поля.
string украдёт буфер, vector — массив, unique_ptr — указатель. Тебе не нужно писать ни строки.❗️ Ключевое условие — не объявлять деструктор. И
~User(){}, и ~User() = default одинаково опасны: любой user-declared деструктор отключает неявную генерацию move.✏️ Твои классы владеют new/delete напрямую — или прячут их в unique_ptr и живут по Rule of Zero?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
- 🙏 2
- 👍 1









