Описание тега rule-of-five
1
ответ
Почему класс с явно объявленным конструктором перемещения не выполняет std::is_move_constructible_v?
Библиотека, которую я использую, требует, чтобы классы, используемые с ее шаблонами, могли быть перемещаемыми и назначаемыми по различным внутренним причинам. Я написал класс и дал ему явный конструктор перемещения. #pragma once #include <entt.hp…
26 июл '20 в 02:26
3
ответа
Как интеллектуальные указатели влияют на правило пяти?
Я узнал, что, когда вы используете указатели в классе, вы должны реализовать правило 5. Если вы не используете указатели, тогда все в порядке, и на самом деле это предпочтительнее использовать значения по умолчанию. Однако как это работает с интелле…
15 апр '20 в 10:57
1
ответ
Виртуальный деструктор базового класса - правило пяти?
У меня есть база State класс интерфейса с виртуальным деструктором по умолчанию. class State { public: virtual void event() = 0; virtual ~State() = default; // relevant part virtual void onCreate() {} virtual void onDestroy() {} virtual void onActiv…
24 май '20 в 13:50
1
ответ
Правило пяти для класса BST в C++
Я реализую класс двоичного дерева поиска, и мне было интересно, правильно ли реализованы мои конструкторы перемещения / копирования и операторы присваивания. (Кажется, все работает правильно, но я впервые использую эти конструкторы и операторы присв…
21 май '20 в 00:59
2
ответа
std::vector с элементами, размещенными в куче - мне нужно правило 5?
Если у меня есть класс с такими членами: class MyClass { public: void set_my_vector() { for (int ind = 0; ind < 3; ++ind) { my_vector.push_back(new MyStruct(i, i*2)); } } private: struct MyStruct { int num_a; int num_b; MyStruct(int i, int j) : n…
08 сен '20 в 07:29
1
ответ
В чем разница между объявлением конструктора копирования с помощью "= default" или его отсутствием вообще?
Я пытаюсь понять поведение автоматически сгенерированного кода компилятора для различных функций, таких как: деструктор конструктор копирования оператор присваивания переместить конструктор оператор присваивания перемещения Будет ли их объявление с …
24 окт '20 в 19:31
0
ответов
Правило C++ из 5 в чем смысл копирования
У меня есть назначение копии для оружия, у которого есть массив указателей для вложений оружия (класс вложения), я не вижу смысла в назначении копии, потому что после клонирования пистолета с конструктором копирования мне никогда не понадобится назн…
18 май '21 в 13:35
0
ответов
Правило пяти при использовании полиморфизма
Я пытаюсь понять правило пяти при использовании интерфейсов (во всяком случае, концепции) и абстрактных классов и изо всех сил пытаюсь понять, как работают правила. Предположим, у меня есть такой макет: #include <memory> #include <optional&…
05 июл '21 в 23:13
1
ответ
Какой минимальный класс следует расширить для типа без копирования / без перемещения?
Скажем, я хочу создать несколько классов для управления ресурсами, которые не следует копировать или перемещать, что было бы минимальным классом, который нужно расширять и избегать ошибок? Идея в том, что, расширяя класс, я на безопасную сторону пер…
30 авг '21 в 13:48
1
ответ
Является ли это правильной реализацией правила пяти (или правила четырех и 1/2)?
Я изучаю правило пяти и его кузенов (правило четырех и 1/2, идиома копирования и обмена, функция обмена друзьями). Я применил Правило четырех и 1/2 на тестовом классе. Он хорошо компилируется. Есть ли скрытая ошибка в моей реализации? Меня особенно …
29 янв '22 в 18:32
2
ответа
Определение интерфейсов (абстрактных классов без элементов) в C++
Под интерфейсом (терминология C#) я подразумеваю абстрактный класс без элементов данных. Таким образом, такой класс указывает только контракт (набор методов), который должны реализовать подклассы. Мой вопрос:как правильно реализовать такой класс в с…
23 дек '20 в 15:36
0
ответов
С++ Правило 5 с реализацией наследования
Следуя примерам из онлайн-руководств по правилам 5, я написал этот класс: #include <iostream> #include <cstring> #include <utility> class A2 { char* _buff; public: A2(const char *text = "test") { std::cout << "New A2\n"; _buf…
06 сен '21 в 09:36
0
ответов
Реализовать оператор присваивания С++ с точки зрения конструктора
Фон Предположим, вы хотите реализовать класс управления ресурсами на C++. Вы не можете использовать правило нуля или правило пяти значений по умолчанию , поэтому вам действительно нужно реализовать конструктор копирования и перемещения, оператор при…
30 ноя '21 в 21:46
0
ответов
С++ PIMPL с использованием std::unique_ptr и правила пяти
Если у вас есть класс C++ с pimpl, использующий std::unique_ptr, и решение того факта, что класс pimpl неполный в заголовке, объявляя мой собственный деструктор (я знаю, что мог бы также предоставить собственный деструктор, но давайте использовать d…
09 апр '22 в 14:10
0
ответов
Правила Ноль/Пять/Шесть нарушены?
Операции присваивания должны быть квалифицированы ссылкой - и вопрос здесь не в том, "есть ли смысл присваивать rvalue", а в правильности. По умолчанию операции присваивания возвращают ссылки lvalue. Следовательно, следующий код действителен Class A…
31 июл '22 в 07:04
1
ответ
Какова связь между правилом пяти, наследованием и полиморфизмом в C++?
Я изучал деструкторы, конструкторы копирования, конструкторы перемещения и все остальное. Я также узнал рекомендацию о том, чтобы пометить ваш деструктор как виртуальный в базовом классе, от которого унаследованы производные классы. Согласно правилу…
13 дек '22 в 06:40
1
ответ
Могут ли операции присваивания, объявленные по умолчанию, иметь квалификаторы ссылок?
При объявлении операций присваивания какdefault, есть ли что-то неправильное в том, чтобы сделать их квалифицированными ссылками, чтобы предотвратить присвоение временным? (Чаще всего это предотвращает глупые ошибки). Общие ресурсы ничего не говорят…
10 ноя '22 в 11:17
1
ответ
Нужно ли здесь соблюдать правило пяти?
Итак, на https://en.cppreference.com/w/cpp/language/rule_of_three написано: Поскольку наличие определяемого пользователем (или = объявленного по умолчанию или = объявленного удаления) деструктора, конструктора копирования или оператора присваивания …
22 июн '22 в 02:36
1
ответ
Как мне поступить с деструктором при создании пользовательского вектора с помощью класса шаблона?
Я попытался создать свой собственный класс Vector с классом шаблона. я ожидаю, что я могу положить мойVector<int>вVector<Vector<int>>переменная. По крайней мере, это то, на что я надеялся ... но он продолжает падать в коде деструкт…
10 июн '22 в 08:38
0
ответов
C++ - clang tidy жалуется на правило X?
Этот код вызывает предупреждение в clang tidy: Класс «Locker» определяет деструктор не по умолчанию, но не определяет конструктор копирования, оператор присваивания копии, конструктор перемещения или оператор присваивания перемещенияclang-tidy(cppco…
17 фев '23 в 08:48