我有一个包含一些数据的结构,特别是大静态分配的数组。 数组长度并不总是完全使用。
我经常需要经常复制这些数据(在实时循环中),所以我需要它尽可能高效。因此,我只想复制包含有用数据的数组的长度。
以下是我对赋值操作符覆盖的建议。你能否详细说明它的效率,并与我不太了解的复制和交换习语进行比较(What is the copy-and-swap idiom?)。
struct Config
{
// Assignment operator: Copy all data from other instance
Config& operator=(const Config&obj)
{
currentArrayLength = obj.currentArrayLength;
memcpy(array, obj.array, obj.currentArrayLength * sizeof(array[0]));
return *this;
}
/* Static */
static const size_t arrayLengthMax = 1000;
/* Data */
uint32_t currentArrayLength = 0;
int32_t array[arrayLengthMax];
}
答案 0 :(得分:1)
复制和交换习惯用法通常意味着您通过值获取参数obj
,这意味着它由复制构造函数隐式复制。优点是你不需要在两个地方实现复制逻辑,但只能在复制构造函数中实现(DRY分词:不要重复自己)。然后交换obj
和this
的内部数据,当by值副本超出范围时,旧数据将自动销毁。
这可以在没有管理动态数据的对象的性能损失的情况下完成,因为swap
对于那些非常便宜,但是当你的数组在对象本身占用空间时,你当前的实现更快 - 大约如此它很快就会结束。