Вопросы по теме 'move-semantics'
Почему перемещение переменной указателя не устанавливает для нее значение null?
При реализации конструкторов перемещения и операторов присваивания перемещения часто пишут такой код:
p = other.p;
other.p = 0;
Неявно определенные операции перемещения будут реализованы с помощью такого кода:
p = std::move(other.p);...
17757 просмотров
schedule
11.12.2022
возврат строки из функции
Я хотел написать функцию, которая будет кросс-платформенной (win32 и linux) и будет возвращать строковое представление даты и времени [чч:мм:сс дд-мм-гггг].
Зная, что я просто хочу использовать возвращенную строку как временную в потоковом режиме,...
382 просмотров
schedule
13.11.2022
Будут ли компиляторы автоматически применять семантику перемещения в методе установки?
Я хочу знать, разрешено ли компилятору автоматически использовать конструктор перемещения для wstring в следующем методе установки (без явного вызова std::move):
void SetString(std::wstring str)
{
m_str = str; // Will str be moved into m_str...
759 просмотров
schedule
23.02.2024
Вперед или двигаться
Являются ли они допустимым использованием перемещения и вперед? Являются ли f3 и f4 одинаковыми? Опасно ли это делать? Спасибо!
#include <utility>
class A {};
A f1() {
A a;
return a; // Move constructor is called
}
A...
174 просмотров
schedule
26.09.2022
Считается ли безопасным получение адреса ссылки rvalue перед перемещением?
Я играю с семантикой перемещения и ссылками [r|l]value, чтобы научиться использовать их в реальных программах. Рассмотрим следующий код:
// 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
Как использовать пользовательское средство удаления с элементом 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 просмотров
schedule
08.12.2022
Поведение перемещения-назначения самому себе
Пример кода:
#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 просмотров
schedule
18.03.2024
Деструктор вызывается перед функцией-членом при назначении unique_ptr ссылке
Я использую unique_ptr и получаю странные результаты. Это код:
class Sniffer
{
public:
Sniffer()
{
cout << "Sniffer()" << endl;
s = "String!";
}
void operator()()
{
cout <<...
186 просмотров
schedule
01.11.2023
Передача двух объектов, где один содержит ссылку на другой, в поток
У меня есть два объекта, где второй требует, чтобы первый пережил его, потому что он содержит ссылку на первый. Мне нужно переместить их обоих в поток, но компилятор жалуется, что первый не живет достаточно долго. Вот код:
use std::thread;...
957 просмотров
schedule
27.12.2023
Есть ли варианты использования std::forward с prvalue?
Наиболее распространенное использование std::forward - это, ну, в общем, совершенная пересылка пересылаемой (универсальной) ссылки, например
template<typename T>
void f(T&& param)
{
g(std::forward<T>(param)); // perfect...
969 просмотров
schedule
05.01.2024
Возврат rvalue - что не так с этим кодом?
Я наткнулся на следующий фрагмент кода
std::string&& test()
{
std::string m="Hello";
return (std::move(m));
}
int main()
{
std::string&& m = test();
}
Я понимаю, что приведенный выше код неверен и небезопасен, но...
186 просмотров
schedule
22.11.2023
Предупреждение: по умолчанию оператор присваивания перемещения X будет перемещать присвоение виртуального базового класса Y несколько раз.
Я получаю предупреждение в Clang при тестировании библиотеки на C++11. Я никогда раньше не сталкивался с предупреждением, и поиск не дает слишком многого для чтения и исследования.
Предупреждение показано ниже и, похоже, связано с множественным...
1326 просмотров
schedule
17.04.2024
почему С++ не использует RVO при возврате локального std::stringstream?
Я прочитал много информации о rvalue и возвращении локальных переменных в С++ >= 11. Из того, что я понял, это то, что «просто возвращайте значение, не используйте перемещение/вперед и не добавляйте && к сигнатуре метода, и компилятор оптимизирует...
305 просмотров
schedule
16.04.2024
Зачем мне вызывать std::move для временного dynamic_bitset?
Я рассказываю здесь многословную предысторию, потому что, в дополнение к прямому ответу, я хотел бы знать, были ли мои рассуждения, которые привели к этой ситуации, правильными.
У меня есть функция, принимающая аргумент dynamic_bitset<> (из...
324 просмотров
schedule
16.03.2024
Гарантировано ли перемещение подобъекта временного объекта при возврате?
#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