Свързани въпроси 'move-semantics'
Напред или Преместване
Това валидна употреба ли е на движение и напред? Еднакви ли са f3 и f4? Опасно ли е да го правите? Благодаря ви!
#include <utility>
class A {};
A f1() {
A a;
return a; // Move constructor is called
}
A f2(A&& a) {...
174 изгледи
schedule
26.09.2022
Защо не се извиква конструкторът за преместване?
Аз съм нов в C++ и се опитвам да разбера препратките към rvalue и семантиката на преместване.
Написах прост клас, Class, който включва метод, fun, който създава екземпляр на класа в своето тяло и го връща. Класът има конструктор за копиране,...
43 изгледи
schedule
04.10.2022
Защо преместването на променлива на указател не го настройва на нула?
Когато се прилагат конструктори за преместване и оператори за присвояване на преместване, често се пише код по следния начин:
p = other.p;
other.p = 0;
Неявно дефинираните операции за преместване ще бъдат реализирани с код като този:
p =...
17757 изгледи
schedule
11.12.2022
връщане на низ от функция
Исках да напиша функция, която ще бъде междуплатформена (win32 и linux) и ще върне низово представяне на датата и часа [чч:мм:сс дд-мм-гггг].
Знаейки, че просто искам да използвам върнатия низ като временен по потоков начин, както е показано...
382 изгледи
schedule
13.11.2022
Счита ли се за безопасно получаването на адрес на препратка към 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 изгледи
schedule
10.11.2022
std::move( ) извиква copy-ctor при липса на move-ctor. Защо и как да го предотвратим?
Искам да знам дали има практика за безопасно програмиране , която би предупредила програмиста за това фино поведение, когато то се случи, или, дори по-добре, да го избегне на първо място.
Потребител на struct A може да не осъзнае, че няма...
2180 изгледи
schedule
09.11.2023
schedule
01.11.2023
Конструктор за копиране на C++ Move и оператор за преместване на присвояване
Направих просто приложение с конструктор за копиране на преместване и оператор за присвояване на копие за преместване и за всеки от тях направих изявление cout само за да ми каже кои се изпълняват. Но по време на изпълнение не видях никакво изявление...
3951 изгледи
schedule
08.12.2022
Деструкторът се извиква преди членска функция при присвояване на unique_ptr на препратка
Използвам unique_ptr и получавам някои странни резултати. Това е кодът:
class Sniffer
{
public:
Sniffer()
{
cout << "Sniffer()" << endl;
s = "String!";
}
void operator()()
{
cout <<...
186 изгледи
schedule
01.11.2023
Предаване на два обекта, където единият съдържа препратка към друг, в нишка
Имам два обекта, при които вторият изисква първият да го надживее, защото съдържа препратка към първия. Трябва да ги преместя и двата в нишка, но компилаторът се оплаква, че първият не живее достатъчно дълго. Ето кода:
use std::thread;
trait...
957 изгледи
schedule
27.12.2023
Има ли случаи на употреба за std::forward с prvalue?
Най-честата употреба на std::forward е да, добре, усъвършенствате препращане на препращаща (универсална) препратка, като
template<typename T>
void f(T&& param)
{
g(std::forward<T>(param)); // perfect forward to g
}...
969 изгледи
schedule
05.01.2024
преместете 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 изгледи
schedule
22.11.2023
Компилаторите ще прилагат ли автоматично семантиката на преместване в метод за настройка?
Искам да знам дали на компилатора е разрешено автоматично да използва конструктора за преместване за wstring в следния метод на настройка (без изрично извикване на std::move):
void SetString(std::wstring str)
{
m_str = str; // Will str be...
759 изгледи
schedule
23.02.2024
Поведение на присвояване на преместване на себе си
Примерен код:
#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 изгледи
schedule
18.03.2024
Как да използвам персонализиран инструмент за изтриване с член std::unique_ptr?
Имам клас с член unique_ptr.
class Foo {
private:
std::unique_ptr<Bar> bar;
...
};
Bar е клас на трета страна, който има функция create() и функция destroy().
Ако исках да използвам std::unique_ptr с него в самостоятелна...
123716 изгледи
schedule
02.04.2024