У меня есть класс с фиксированным размером, член массива в стиле c, что-то вроде this :
struct some {
static const size_t name_length = 64;
char name[name_length+1];
some() = default;
some(const some& s) {
memcpy(name, s.name, strlen(s.name)+1);
}
// other constructors...
void set_name(const char* s) {
auto len = strlen(s);
if (len > name_length) {
len = name_length;
}
memcpy(name, s, len);
name[len] = '\0';
}
};
Конструктор копирования работает нормально, но как мне реализовать конструктор перемещения?
Я знаю, что мог бы заменить массив c-style на std::array
, но есть ли способ сделать это без него?
PS: многие люди предлагают мне использовать сгенерированные компилятором конструкторы копирования / перемещения ... К сожалению, в реальном классе я не могу этого сделать, потому что у этого класса есть другие члены и другие конструкторы ... Я просто хотел узнать, есть ли способ перемещения элементов фиксированного размера. Я думаю, что нет, и конструктор перемещения должен будет просто скопировать байты. Интересно, это то, что std::array
делает ...