Свързани въпроси 'move-semantics'

Напред или Преместване
Това валидна употреба ли е на движение и напред? Еднакви ли са f3 и f4? Опасно ли е да го правите? Благодаря ви! #include <utility> class A {}; A f1() { A a; return a; // Move constructor is called } A f2(A&& a) {...
174 изгледи

Защо не се извиква конструкторът за преместване?
Аз съм нов в C++ и се опитвам да разбера препратките към rvalue и семантиката на преместване. Написах прост клас, Class, който включва метод, fun, който създава екземпляр на класа в своето тяло и го връща. Класът има конструктор за копиране,...
43 изгледи
schedule 04.10.2022

Защо преместването на променлива на указател не го настройва на нула?
Когато се прилагат конструктори за преместване и оператори за присвояване на преместване, често се пише код по следния начин: p = other.p; other.p = 0; Неявно дефинираните операции за преместване ще бъдат реализирани с код като този: p =...
17757 изгледи
schedule 11.12.2022

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

Счита ли се за безопасно получаването на адрес на препратка към rvalue преди преместване?
Играя си около Move Semantics и [r|l]value references, за да науча как да ги използвам в програми от реалния свят. Помислете за следния код: // 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

да Така че сравнява само true, ако са един и същ обект.
186 изгледи

Конструктор за копиране на C++ Move и оператор за преместване на присвояване
Направих просто приложение с конструктор за копиране на преместване и оператор за присвояване на копие за преместване и за всеки от тях направих изявление cout само за да ми каже кои се изпълняват. Но по време на изпълнение не видях никакво изявление...
3951 изгледи

Деструкторът се извиква преди членска функция при присвояване на unique_ptr на препратка
Използвам unique_ptr и получавам някои странни резултати. Това е кодът: class Sniffer { public: Sniffer() { cout << "Sniffer()" << endl; s = "String!"; } void operator()() { cout <<...
186 изгледи

Предаване на два обекта, където единият съдържа препратка към друг, в нишка
Имам два обекта, при които вторият изисква първият да го надживее, защото съдържа препратка към първия. Трябва да ги преместя и двата в нишка, но компилаторът се оплаква, че първият не живее достатъчно дълго. Ето кода: use std::thread; trait...
957 изгледи

Има ли случаи на употреба за std::forward с prvalue?
Най-честата употреба на std::forward е да, добре, усъвършенствате препращане на препращаща (универсална) препратка, като template<typename T> void f(T&& param) { g(std::forward<T>(param)); // perfect forward to g }...
969 изгледи

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

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

Компилаторите ще прилагат ли автоматично семантиката на преместване в метод за настройка?
Искам да знам дали на компилатора е разрешено автоматично да използва конструктора за преместване за wstring в следния метод на настройка (без изрично извикване на std::move): void SetString(std::wstring str) { m_str = str; // Will str be...
759 изгледи

Поведение на присвояване на преместване на себе си
Примерен код: #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

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

initializer_list неизменна природа води до прекомерно копиране
Защо достъпът до std::initializer_list не ни позволява да променяме съдържанието му? Това е голям недостатък на std::initializer_list , когато се използва за основната му цел (да инициализира контейнер), тъй като използването му води до прекомерно...
350 изгледи

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