Size: a a a

2020 July 25

s

std::slavik in supapro.cxx
Nano
Ну вообще, как в классе написан конструктор перемещения, так оно и работает. Можно посмотреть реализацию таких классов, которые чем-то владеют на куче, например string или vector. По сути, они просто передают указатели на данные другому объекту (свои указатели устанавилвают на null, чтобы в деструкторе проверить, нужно ли освободжать память или нет). Если конструктор перемещения реализован автоматически, то насколько я знаю, он просто делает move всех своих полей.
Implicitly-defined move constructor
If the implicitly-declared move constructor is neither deleted nor trivial, it is defined (that is, a function body is generated and compiled) by the compiler if odr-used. For union types, the implicitly-defined move constructor copies the object representation (as by std::memmove). For non-union class types (class and struct), the move constructor performs full member-wise move of the object's bases and non-static members, in their initialization order, using direct initialization with an xvalue argument. If this satisfies the requirements of a constexpr constructor, the generated move constructor is constexpr.
источник

s

std::slavik in supapro.cxx
короче копирует
источник

s

std::slavik in supapro.cxx
ну то есть используя move с дефолтными конструкторами перемещения мне не нужно париться по поводу того что данные могут потеряться
источник

AS

Anatoly Shirokov in supapro.cxx
std::slavik
короче копирует
источник

s

std::slavik in supapro.cxx
Nano
Просто так сложно объяснить) Лучше где-то почитать про это и попробовать написать свои конструкторы перемещения
у меня вопрос скорее не про написание своих конструкторов перемещения, а про то - стоит ли мне париться если я просто оберну те места где раньше было копирование в std::move
источник

N

Nano in supapro.cxx
std::slavik
ну то есть используя move с дефолтными конструкторами перемещения мне не нужно париться по поводу того что данные могут потеряться
Куда они потреяются? В общем случае беспокоиться не нужно. Но класс может реализовывать какое-то нетривиальное поведение и ему нужно будет определять свой конструктор или вовсе запрещать его использование
источник

AS

Anatoly Shirokov in supapro.cxx
std::slavik
у меня вопрос скорее не про написание своих конструкторов перемещения, а про то - стоит ли мне париться если я просто оберну те места где раньше было копирование в std::move
если все условия соблюдены для генерации default move constructor, то все будет норм. если класс содержит неперемещаемый тип ты не сможешь применить std::move
источник

W

Wild_Wind in supapro.cxx
Гляжу в сурсы libstdc++, stddef.h, враппер над сишной либой:

#if defined(__need_NULL)
#undef NULL
#ifdef __cplusplus
#  if !defined(__MINGW32__) && !defined(_MSC_VER)
#    define NULL __null

__null
- это что вообще?
Вроде, можно считать литералом, наверное. Но я не понял.
источник

W

Wild_Wind in supapro.cxx
Более определений __null не нашёл.
источник

AS

Anatoly Shirokov in supapro.cxx
Wild_Wind
Гляжу в сурсы libstdc++, stddef.h, враппер над сишной либой:

#if defined(__need_NULL)
#undef NULL
#ifdef __cplusplus
#  if !defined(__MINGW32__) && !defined(_MSC_VER)
#    define NULL __null

__null
- это что вообще?
Вроде, можно считать литералом, наверное. Но я не понял.
это детали реализации, возможно, внутренняя константа обозначающая null
источник

W

Wild_Wind in supapro.cxx
Anatoly Shirokov
это детали реализации, возможно, внутренняя константа обозначающая null
А тип её?
источник

AS

Anatoly Shirokov in supapro.cxx
Wild_Wind
А тип её?
детали реализации конкретного компилятора и конкретной стандартной библиотеки
источник

AS

Anatoly Shirokov in supapro.cxx
возможно, вшито в компилятор
источник

W

Wild_Wind in supapro.cxx
Anatoly Shirokov
детали реализации конкретного компилятора и конкретной стандартной библиотеки
Ясно, отдано на откуп разрабам компилятора.
источник

TS

Till Schneider in supapro.cxx
Wild_Wind
Гляжу в сурсы libstdc++, stddef.h, враппер над сишной либой:

#if defined(__need_NULL)
#undef NULL
#ifdef __cplusplus
#  if !defined(__MINGW32__) && !defined(_MSC_VER)
#    define NULL __null

__null
- это что вообще?
Вроде, можно считать литералом, наверное. Но я не понял.
в сурсах есть штуки, которые просто являются некой магией для компилятора
источник

W

Wild_Wind in supapro.cxx
Till Schneider
в сурсах есть штуки, которые просто являются некой магией для компилятора
:(
Хотю тоже магию. Шоб вжухать.
источник

TS

Till Schneider in supapro.cxx
Wild_Wind
:(
Хотю тоже магию. Шоб вжухать.
imagemagick в помощь =)
источник

W

Wild_Wind in supapro.cxx
Till Schneider
imagemagick в помощь =)
Заманчиво. Пожалуй, на досуге попробую помагичить.
источник

TS

Till Schneider in supapro.cxx
@zamazan4ik прекращай)))
источник

AZ

Alexander Zaitsev in supapro.cxx
Till Schneider
@zamazan4ik прекращай)))
война машин, не иначе
источник