Назначение копии по умолчанию с элементами массива

У меня есть определение класса, подобное следующему:

class UUID
{
  public:
    // Using implicit copy assignment operator

  private:
    unsigned char buffer[16];
};

У меня только что произошел сбой модульного теста, который проверял правильность работы присваивания копий. К моему удивлению, один байт в середине массива buffer [] был скопирован неправильно.

Насколько я понимаю, оператор присваивания копии по умолчанию выполняет поэлементное копирование и это для элементов массива (не элементов указателя на массив), которые влечет за собой поэлементное копирование массива. Я ошибаюсь?

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

Кто-нибудь хочет сказать мне, где я ошибся?

Изменить:

Чтобы расширить это, a немного, класс не является типом POD - он является производным от нескольких абстрактных базовых классов и, следовательно, имеет виртуальный деструктор. Однако массив является единственным элементом данных, и использование, которое не удалось в модульном тесте, было следующим:

const int n = 100;

std::vector<UUID> src, dst;
src.reserve(n);
dst.resize(n);

for (int i = 0; i < n; ++i) {
  UUID id;
  src.push_back(id);
}

for (int i = 0; i < n; ++i) {
  dst[i] = src[i];
}

bool good = true;
for (int i = 0; i < n; ++i) {
  const bool thisGood = (dst[i] == src[i]);

  std::cout << "i = " << i << " -> src = '" << src[i]
            << "', dst = '" << dst[i] << "', src == dst ? "
            << thisGood << '\n';

  good = (good && thisGood);
}
9
задан Drew Hall 9 September 2010 в 12:37
поделиться