У меня есть структура определяется следующим образом:Копирования структуры на другую структуру
struct Queries {
uint64_t Id;
uint64_t from;
uint32_t counter; // total queries
char queries[];
};
То, что я пытаюсь сделать, это создать новый STRUCT «объект» и скопировать значения из существующего в этом новом объект.
То, что я пытался
void function(Queries* oldq){
Queries* q = new Queries();
// values are copied correctly
q->Id = oldq->Id;
q->from = oldq->from;
q->counter = oldq->counter;
// copy is not correct
for (unsinged i = 0; i < oldq->counter; i++)
q->queries[i] = oldq->queries[i];
}
1) Я также попытался:
q = oldq;
, но это не работает.
2) Я думаю, что мне нужно выделить пространство для массива запросов, но поскольку член структуры не является указателем, я не знаю, как это сделать.
Если вы определяете правильную копию ctor, вы можете использовать 'Queries * q = new Queries (* oldq);' – Slava
Ваше мышление верное. Перед копированием массива необходимо предварительно выделить 'counter * sizeof (char)' bytes. Но вам не нужен явный цикл для его копирования - вы можете использовать 'memcpy'. В качестве альтернативы вы можете реализовать это как [конструктор копирования] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three), как цитируется Slava. – jweyrich
Но как мне выполнить назначение в массиве внутри конструктора копирования? – pirox22