Описание тега rule-of-three
The rule of three (also known as the Law of The Big Three or The Big Three) is a rule of thumb in C++ that claims that if a class defines one of the following it should probably explicitly define all three: destructor, copy constructor, assignment operator
1
ответ
Ошибки шаблона C++ с разными типами
Мне нужно найти все возможные, как минимум три, ошибки из следующего. template<typename A, typename B, typename C> C myfunction(const A& a, const B& b) { if ( a < b ) return (C) a; else return (C) b; } Мой ответ был Типы A и B могут…
26 апр '13 в 00:56
0
ответов
Как написать класс с его членом является вектором указателей на собственный определенный класс
Я новичок в C++ и пытаюсь написать класс CarRental, который содержит вектор указателей на базовый класс Car. Вот класс автомобилей. class Car{ public: Car():mPlate(""), mBrand(""){}//constructor Car(string p, string b): mPlate(p), mBrand(b){} //cons…
05 окт '16 в 20:17
1
ответ
Действительно ли безопасно не проверять в операторе copy assignemt, присваивается ли объект самому себе?
Вот пример реализации "Правила трех", который я нашел: class Array { public: int size; int* vals; Array() : size(0), vals(NULL){} Array( int s, int* v ); Array(const Array&); // 1 Array& operator=(const Array&); // 2 ~Array(); // 3 }; Ar…
10 дек '18 в 22:01
3
ответа
Правило трех в C++
Я читал, что правило трех, что такое правило трех? резюмируется следующим образом: Если вам нужно явно объявить деструктор, конструктор копирования или оператор копирования, вам, вероятно, нужно явно объявить все три из них. Мой вопрос: в приложении…
13 июн '12 в 22:47
2
ответа
Правило трех упражнений неожиданный результат
Я стараюсь изучать основы C++ в свободное время и следую упражнениям из книги. Во-первых, когда я ввожу 9 как строку и 8 как столбец, я получаю ошибку освобождения malloc. Во-вторых, я получаю 0 в качестве вывода, я не вижу, что я ввожу. Я хочу напи…
02 сен '15 в 16:42
3
ответа
Исключение из правила трех?
Я много читал о правиле трех в C++. Многие клянутся этим. Но когда правило сформулировано, оно почти всегда включает слово "обычно","вероятно" или "вероятно", указывающее на наличие исключений. Я не видел много дискуссий о том, какими могут быть эти…
21 мар '13 в 20:27
1
ответ
Обнаружено повреждение кучи после нормального блока (#181)
(прежде всего извините за английский, потому что я не очень хорош в этом) Я написал код для магического квадрата, который отлично работает и дает истинный квадрат. Когда он скомпилирован и я запускаю программу, в этом нет ничего плохого. Но когда он…
05 ноя '16 в 12:19
2
ответа
Рекурсивный вызов в конструкторе копирования
Я реализовал класс, следуя правилу трех, и получаю сбой. После отладки я пришел к выводу, что конструктор копирования вызывает сам себя несколько раз вместо вызова оператора равенства. Почему это так? Разве это не должно вызывать оператор равенства?…
10 окт '18 в 13:40
0
ответов
C++ вектор теряет кучу выделенного указателя
Я написал простую программу ниже для объяснения. class A{ public: int *x; A(){ x = 0; } ~A(){ delete x; } void foo(){ x = new int(); *x = 99; } }; int main(){ std::vector<A> as; for (int i = 0; i < 3; ++i){ as.push_back(A()); as.back().foo(…
02 дек '15 в 10:09
2
ответа
C++ - Для вектора указателей на объект перераспределение вызывает удаление и копирование объектов?
Насколько я понимаю, если у вас есть вектор объектов класса, если вы удаляете какой-либо элемент вектора, обычно вектор перераспределяет некоторые из своих объектов, чтобы сохранить смежность памяти. Следовательно, вам нужно реализовать правило трех…
28 мар '14 в 01:52
8
ответов
Что такое правило трех?
Что означает копирование объекта? Что такое конструктор копирования и оператор присваивания копии? Когда я должен объявить их сам? Как я могу предотвратить копирование моих объектов?
13 ноя '10 в 13:27
1
ответ
Правило трех. Конструктор копирования, реализация оператора присваивания
Правило трех. Конструктор копирования, реализация оператора присваивания #include <iostream> using namespace std; class IntPart { public: IntPart(); // default constructor IntPart(int n); private: unsigned int* Counts; unsigned int numParts; u…
23 апр '13 в 06:36
2
ответа
C++ деструкторы, динамическое размещение
Недавно у меня были некоторые ошибки (bad_alloc) из-за отсутствия деструктора. В настоящее время у меня есть два класса, настроенные таким образом: class ObjOne { friend class ObjTwo; public: //constructors and some other random methods ObjOne(int n…
29 мар '13 в 20:45
1
ответ
C++: идиома копирования и замены, альтернативный конструктор
NB: Этот вопрос следует за предыдущим, я надеюсь, что все еще можно задавать его как новый вопрос. Я пытаюсь реализовать "правило трех с половиной" (идиома копирования и замены) для класса дерева, который выглядит следующим образом: class Tree { fri…
09 авг '13 в 04:20
1
ответ
C++ Перегрузочный оператор присваивания для ошибки динамического многомерного массива
У меня проблемы с перегрузкой оператора = динамическими массивами. Это то, что я до сих пор. Также я знаю, что не написал свой деструктор или конструктор, но сначала мне нужно сосредоточиться на этом операторе: В моем заголовочном файле: #ifndef fas…
04 июл '15 в 02:35
2
ответа
Ошибка сегментации; правило трех
У меня есть такой файл заголовка #ifndef __coulomb_h_ #define __coulomb_h_ #include "nml_dcvector.h" #include <fstream> #include <iostream> #include <complex> #include <vector> using namespace std; class Coulomb{ public: type…
18 мар '15 в 03:18
1
ответ
Заставьте 2 нестатических поля (которые являются динамическими массивами) использовать память рядом друг с другом
Позволять B1 а также B2 быть классами хранения динамического размера. (например B1~std::vector<char> B2~std::vector<float>) В C++11, если я кодирую B1 а также B2 "s move а также copy функция (правило пяти), класс C который содержит их ка…
11 сен '17 в 08:06
0
ответов
Должен ли интерфейс C++ подчиняться правилу пяти?
Как правильно объявлять методы создания экземпляров при определении класса интерфейса? Абстрактные базовые классы должны иметь виртуальный деструктор по очевидным причинам. Однако затем выдается следующее предупреждение компиляции: "InterfaceClass о…
22 апр '18 в 01:49
1
ответ
Программа аварийного завершения конструктора копирования Linked List
Я не уверен в том, почему мой конструктор копирования, похоже, приводит к сбою программы, все остальные функции были в порядке в классе связанного списка. Правило 5 действительно смущает меня сейчас реализацией. Если у кого-то есть указания или указ…
25 фев '17 в 05:10
1
ответ
Почему удаление указателя Actor приводит к тому, что "Program.exe вызвал точку останова"
Я пытаюсь создать Actor указатель, указывающий на другого Actor объект, вот так: Actor other = Actor(); Actor* ptr = &other; А потом, когда я пытаюсь delete ptr, это приводит к ошибке во время выполнения: Program.exe вызвал точку останова Но ког…
27 июл '17 в 00:03