gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:17:50 26 4
gpt4 key购买 nike

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

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

以下是我对赋值运算符覆盖的建议。您能否详细说明一下它的效率,并与我不太了解的 copy-and-swap 习语(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 对这些对象来说非常便宜,但是由于您的数组占用了对象本身的空间,因此您当前的实现速度更快– 尽可能快。

关于使用静态数组的 C++ 高效结构复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com