我有一个类似于以下的类定义:
class UUID
{
public:
// Using implicit copy assignment operator
private:
unsigned char buffer[16];
};
我刚刚进行了一个单元测试失败,它正在验证复制分配是否正常工作。令我惊讶的是,buffer[] 数组中间的一个字节被错误地复制了。
我的理解是,默认的复制赋值运算符执行按成员复制,而对于数组成员(不是指向数组成员的指针),则需要按元素复制数组。我弄错了吗?
我的直觉是,我被一个悬垂的指针咬住了,它踩在了我的数组中间。但是,当我将这些对象的向量复制到另一个向量中时,我会重复看到这种情况。
有人愿意告诉我哪里出错了吗?
编辑:
稍微扩展一下,这个类不是 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);
}