使用静态数组的 C++ 高效结构复制

C++ efficient structure copy with static arrays

我有一个包含一些数据的结构,尤其是大的静态分配数组。 数组长度并不总是完全使用。

我需要经常复制此数据(在实时循环中),因此我需要它尽可能高效。因此,我只想复制包含有用数据的数组长度。

以下是我对赋值运算符覆盖的建议。能否请您详细说明它的效率,并与我不太了解的复制和交换成语进行比较(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];
}

copy-and-swap 惯用语一般表示你按值取参数obj,这意味着它是由复制构造函数隐式复制的。好处是不需要在两个地方实现拷贝逻辑,只需要在拷贝构造函数中(DRY分词:不要重复自己)。然后交换 objthis 的内部数据,当按值复制超出范围时,旧数据将自动销毁。

对于管理动态数据的对象,这可以在没有性能损失的情况下完成,因为 swap 对这些对象来说非常便宜,但是由于您的数组在对象本身中使用 space,您当前的实施速度更快 – 差不多快了。