Описание тега copy-assignment

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
2 ответа

Можно ли сделать так, чтобы `=` предпочитало присвоение из преобразования вместо (удаленного) копирования?

Я обнаружил несколько потоков, которые в значительной степени подразумевают, что это невозможно, но ни один из них не использует точно такую ​​же комбинацию операторов и условий, поэтому я хотел бы спросить более конкретно. Надеюсь, это означает, чт…
1 ответ

Как поменять местами два объекта без оператора копирования?

У меня есть класс А, где, оператор копирования копирования удаляется. Как я должен поменять местами два экземпляра? Я пытался с помощью std::swap но это не сработало. class A { private: int a; public: A& operator=(const A& other) = delete; A…
09 фев '19 в 21:28
4 ответа

Полезно ли указывать новый адрес в свободном хранилище при динамическом размещении?

Ниже приведено упражнение из C++ Primer 5th Edition: Упражнение 13.22. Предположим, что мы хотим, чтобы HasPtr вел себя как значение. То есть каждый объект должен иметь свою собственную копию строки, на которую указывают объекты. Мы покажем определе…
1 ответ

Перегрузка оператора "+" & "=" проблема - школа asst

Первый раз здесь, но я задержусь на пару месяцев. В настоящее время балуется C++ с небольшим количеством знаний Java, а также с предыдущих курсов Comp Sci в школе. Я прошу прощения, если некоторые из вас смотрят на это и разочарованы, поскольку уже …
1 ответ

Почему идеальная пересылка (перехват) не работает для реализации копирования-назначения?

В классе с серией ctors (большинство из которых имеют ровно один аргумент), я хочу, чтобы все ctor с одним аргументом также были отражены соответствующим оператором присваивания. Которы включают в себя, но не ограничиваются копи-ctor и move-ctor. Та…
13 ноя '17 в 20:56
2 ответа

Рекомендуются ли операторы копирования с идиомой копирования и обмена и проверкой самостоятельного назначения?

Здесь вы можете увидеть реализацию оператора присваивания копирования с самопроверкой проверки: String & operator=(const String & s) { if (this != &s) { String(s).swap(*this); //Copy-constructor and non-throwing swap } // Old resources …
09 май '16 в 20:49
2 ответа

Рекурсивный вызов в конструкторе копирования

Я реализовал класс, следуя правилу трех, и получаю сбой. После отладки я пришел к выводу, что конструктор копирования вызывает сам себя несколько раз вместо вызова оператора равенства. Почему это так? Разве это не должно вызывать оператор равенства?…
1 ответ

Могу ли я написать операторы копирования и перемещения для класса?

Это мои прототипы, MyClass& operator=(MyClass rhs); // copy assignment MyClass& operator=(MyClass &&rhs); // move assignment Но когда я звоню MyClass a, b; a = std::move(b); есть ошибка. 556 IntelliSense: more than one operator "=" m…
17 апр '15 в 12:06
1 ответ

Назначение Python в массиве против скаляра

У меня есть 2D массив A формы (4,3)и одномерный массив a формы (4,), Я хочу поменять местами первые два ряда A, а также первые два элемента в a, Я сделал следующее: A[0,:],A[1,:] = A[1,:],A[0,:] a[0],a[1] = a[1],a[0] Видимо, это работает для a, но н…
1 ответ

Автоматизация между контейнерами разных объектов с назначением копирования

У меня редкий вектор типа std::vector<SparseElement<T,I>> где SparseElement: template<typename T, typename I = unsigned int> struct SparseElement { I index; T value; //............ SparseElement &operator=(const std::pair<I,…
3 ответа

Почему конструктор копирования вызывается перед назначением копирования?

class LinkedList { public: LinkedList() : _head(nullptr) {} LinkedList(ListElement *newElement) : _head(newElement) {} ~LinkedList() { }; LinkedList(const LinkedList& LL); LinkedList& operator=(LinkedList byValLinkedList); private: ListEleme…
31 май '16 в 01:04
1 ответ

Сгенерированные операторы копирования и перемещения?

В настоящее время я читаю книгу " Эффективное современное С ++" от Скотта Мейерса, и теперь я нахожусь по адресу: Пункт 17: Понимание генерации функций специальных членов. Мое недоразумение исходит из следующей части (обоснование): Две операции копи…
2 ответа

Странный конструктор копирования

С помощью следующей программы C++: #include <memory> #include <iostream> using namespace std; struct my_class{ int value; my_class(int id): value(id){ cout<<"constructing "<<id<<endl; cout<<"address is "<<st…
21 дек '12 в 12:28
1 ответ

fill insert() - копировать конструктор и копировать присвоение noexcept status?

Должны ли элементы контейнера STL иметь noexcept конструкторы копирования и операторы копирования-назначения? Пожалуйста, предоставьте ссылку, если это возможно. Если нет, то каково состояние контейнера STL, когда исключение происходит во время муль…
24 авг '15 в 10:25
1 ответ

C++ копировать конструктор

Я пытаюсь получить хорошее представление о конструкторах копирования, и я нашел эту часть кода. #include<iostream> using namespace std; class A1 { int data; public: A1(int i = 10) : data(i) { cout << "I am constructing an A1 with: " <…
08 фев '16 в 11:17
2 ответа

Понимание конструктора и оператора копирования

По моему мнению, в случае использования оператора копирования 1, поэтому вывод должен быть 0 68 но это 0 87 и в случае 2 это 87 87 что хорошо #include <iostream> using namespace std; class numbered { static int un; public: int a; numbered (): …
31 дек '13 в 10:17
2 ответа

Реализация полноценного оператора копирования-назначения

В C++ Primer есть пример использования элементов управления копированием, чтобы сделать класс "полноценным"; то есть при копировании объекта копии являются независимыми. Предлагает следующий код: class HasPtrValue { public: HasPtrValue(const std::st…
24 фев '15 в 19:55
2 ответа

Удаление конструкторов копирования и операторов присваивания копии. Какие из них необходимы?

У меня есть вариант использования, что мой объект не должен быть скопирован каким-либо образом. Я написал преувеличенный полный список удалений конструктора копирования и оператора копирования. Их так много, что я не могу понять, какие из них исполь…
2 ответа

Назначение копирования C++ и перемещение не вызывается

Я пытаюсь реализовать копирование и перемещение заданий, но не понимаю, как их использовать. Я прочитал следующую тему Когда вызывался оператор копирования? Но это не сработало для меня. Учебный класс: class Directory{ string name; public: Directory…