Вопросы по теме 'move-semantics'

Почему перемещение переменной указателя не устанавливает для нее значение null?
При реализации конструкторов перемещения и операторов присваивания перемещения часто пишут такой код: p = other.p; other.p = 0; Неявно определенные операции перемещения будут реализованы с помощью такого кода: p = std::move(other.p);...
17757 просмотров
schedule 11.12.2022

возврат строки из функции
Я хотел написать функцию, которая будет кросс-платформенной (win32 и linux) и будет возвращать строковое представление даты и времени [чч:мм:сс дд-мм-гггг]. Зная, что я просто хочу использовать возвращенную строку как временную в потоковом режиме,...
382 просмотров

Будут ли компиляторы автоматически применять семантику перемещения в методе установки?
Я хочу знать, разрешено ли компилятору автоматически использовать конструктор перемещения для wstring в следующем методе установки (без явного вызова std::move): void SetString(std::wstring str) { m_str = str; // Will str be moved into m_str...
759 просмотров

Вперед или двигаться
Являются ли они допустимым использованием перемещения и вперед? Являются ли f3 и f4 одинаковыми? Опасно ли это делать? Спасибо! #include <utility> class A {}; A f1() { A a; return a; // Move constructor is called } A...
174 просмотров

Считается ли безопасным получение адреса ссылки rvalue перед перемещением?
Я играю с семантикой перемещения и ссылками [r|l]value, чтобы научиться использовать их в реальных программах. Рассмотрим следующий код: // Item is a heavy class having move ctor and assignment but no copy. std::map<std::string, Item*>...
1164 просмотров

std::move() вызывает copy-ctor в отсутствие move-ctor. Почему и как это предотвратить?
Я хочу знать, существует ли практика безопасного программирования , которая предупреждала бы программиста об этом тонком поведении, когда оно имеет место, или, что еще лучше, вообще избегала бы его. Пользователь struct A может не понимать, что...
2180 просмотров
schedule 09.11.2023

Как использовать пользовательское средство удаления с элементом std::unique_ptr?
У меня есть класс с членом unique_ptr. class Foo { private: std::unique_ptr<Bar> bar; ... }; Bar — это сторонний класс, который имеет функцию create() и функцию destroy(). Если бы я хотел использовать std::unique_ptr с ним...
123716 просмотров
schedule 02.04.2024

Конструктор копирования C++ Move и оператор присваивания Move
Я сделал простое приложение с конструктором перемещения копирования и оператором присваивания перемещения копирования, и для каждого из них я сделал оператор cout, чтобы сообщить мне, какие из них выполняются. Но во время выполнения я не видел...
3951 просмотров

Поведение перемещения-назначения самому себе
Пример кода: #include <iostream> int main() { std::vector<int> w(20, 123), x; w = std::move(w); std::cout << w.size() << std::endl; } Вывод на g++ 4.8.3: 0 Конечно, стандарт говорит, что оператор...
2554 просмотров
schedule 26.02.2024

Нужна помощь в понимании конструкторов перемещения С++ 11
Как новичок в C++, у меня действительно есть проблемы с пониманием нового Move-Constructor C++11, и я надеюсь, что кто-нибудь сможет объяснить конкретную ситуацию, с которой я столкнулся. Возьмем этот пример кода: #include <iostream> using...
259 просмотров
schedule 15.03.2024

переместить shared_ptr в список инициализации конструктора
Недавно я видел несколько примеров кода, подобного этому, где std::move использовался в списке инициализации конструктора (а не в конструкторе перемещения). class A { public: A(std::shared_ptr<Res> res) : myRes(std::move(res)) { //...
1139 просмотров
schedule 05.02.2024

Неизменный характер initializer_list приводит к чрезмерному копированию
Почему доступ к std::initializer_list не позволяет нам изменять его содержимое? Это большой недостаток std::initializer_list при использовании его по его основному назначению (для инициализации контейнера), поскольку его использование приводит к...
350 просмотров

Деструктор вызывается перед функцией-членом при назначении unique_ptr ссылке
Я использую unique_ptr и получаю странные результаты. Это код: class Sniffer { public: Sniffer() { cout << "Sniffer()" << endl; s = "String!"; } void operator()() { cout <<...
186 просмотров

Передача двух объектов, где один содержит ссылку на другой, в поток
У меня есть два объекта, где второй требует, чтобы первый пережил его, потому что он содержит ссылку на первый. Мне нужно переместить их обоих в поток, но компилятор жалуется, что первый не живет достаточно долго. Вот код: use std::thread;...
957 просмотров

Есть ли варианты использования std::forward с prvalue?
Наиболее распространенное использование std::forward - это, ну, в общем, совершенная пересылка пересылаемой (универсальной) ссылки, например template<typename T> void f(T&& param) { g(std::forward<T>(param)); // perfect...
969 просмотров

Возврат rvalue - что не так с этим кодом?
Я наткнулся на следующий фрагмент кода std::string&& test() { std::string m="Hello"; return (std::move(m)); } int main() { std::string&& m = test(); } Я понимаю, что приведенный выше код неверен и небезопасен, но...
186 просмотров

Предупреждение: по умолчанию оператор присваивания перемещения X будет перемещать присвоение виртуального базового класса Y несколько раз.
Я получаю предупреждение в Clang при тестировании библиотеки на C++11. Я никогда раньше не сталкивался с предупреждением, и поиск не дает слишком многого для чтения и исследования. Предупреждение показано ниже и, похоже, связано с множественным...
1326 просмотров

почему С++ не использует RVO при возврате локального std::stringstream?
Я прочитал много информации о rvalue и возвращении локальных переменных в С++ >= 11. Из того, что я понял, это то, что «просто возвращайте значение, не используйте перемещение/вперед и не добавляйте && к сигнатуре метода, и компилятор оптимизирует...
305 просмотров
schedule 16.04.2024

Зачем мне вызывать std::move для временного dynamic_bitset?
Я рассказываю здесь многословную предысторию, потому что, в дополнение к прямому ответу, я хотел бы знать, были ли мои рассуждения, которые привели к этой ситуации, правильными. У меня есть функция, принимающая аргумент dynamic_bitset<> (из...
324 просмотров

Гарантировано ли перемещение подобъекта временного объекта при возврате?
#include <string> #include <vector> using namespace std; auto f() { vector<string> coll{ "hello" }; // // Must I use move(coll[0]) ? // return coll[0]; } int main() { auto s = f(); DoSomething(s); }...
577 просмотров
schedule 25.04.2024