Шаблоны классов memcpy и C ++ - как их использовать? - PullRequest
4 голосов
/ 23 января 2011

Итак. Как мы можем назвать что-то вроде memcpy (dataCopy, data, length);скопировать абстрактные данные T?

Или, если абстрактный T небезопасен, скажем, мы знаем, что T - это POD (простые старые данные, в основном структура C) - возможно ли его скопировать?

Ответы [ 3 ]

3 голосов
/ 23 января 2011

Вы не можете сделать это надежно.Если бы это было так просто, возможно и надежно, то программисты не стали бы перегружать operator=() и писать конструктор копирования.

Если вы хотите сделать копию вашего объекта, то либо перегружаете operator=(), либонапиши конструктор копирования или сделай оба!

3 голосов
/ 23 января 2011

Вы имеете в виду работу для какого-то произвольного типа C ++ T?Если вы не знаете, что T является типом POD (обычные старые данные, в основном структура C), копировать объекты типа T с memcpy небезопасно.Это может помешать, например, запуску конструктора копирования T, что может привести к неправильному копированию (например, попытка memcpy и std::vector не скопирует буфер данных).

0 голосов
/ 23 января 2011

Это может быть опасно в зависимости от типа T. Если T является типом POD, то все в порядке. В противном случае я предлагаю вам просто вызвать конструктор копирования T (или использовать шаблон клонирования, если это невозможно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...