gpt4 book ai didi

c++ - 给定三个*略*不同的类对象拷贝,我如何有效地存储它们之间的差异?

转载 作者:搜寻专家 更新时间:2023-10-31 00:46:41 27 4
gpt4 key购买 nike

直接问题:对于一个类对象的三个(或更多)几乎相同的拷贝,我怎样才能最好(或最有效)地存储它们之间的差异?

背景:我有一个需要一组参数的算法:

struct params
{
std::string A;
std::string B;

double C;
double D;

userDefinedTypeDef S;
};

而且我想调用我的算法三次。第一次,C = 3 & S = 'foo'。第二次,C = 4 & S = 'foo'。第三次,C = 4 & S = 'bar'。现在给出的例子只是为了说明,真正的对象是类,不是结构体,有几百个成员。我还想多次调用该算法,所以我不想让这个对象有额外的拷贝。那么仅存储两个类对象之间差异的最佳模式/实现/方法是什么?

换句话说,我如何存储“对象 2 与 &(对象 1) 相同,除了 C = 4”??

编辑:如以下评论所述,我真的很想避免更改函数调用以及参数类对象或成员对象的数组。我这样做的目的是保留一个拷贝,ala“currentParam”,然后保留连续调用之间差异的列表。这样,我就可以简单地更新发生变化的值,而其他所有值保持不变,并使用提供给我的函数。

也就是说,最简单的方法是什么?创建一个带有 bool 标志“member1_changed”的类?然后使用 union ?我相当困惑——一直对稀疏矩阵存储以及它们之间的关系感到困惑——这就是我问这个问题的原因。

最佳答案

您可能会找到 Flyweight design pattern引起兴趣。它专为解决您的问题而设计。

这是一种存储差异的方法:

第 1 步:用指向成员的指针替换所有成员。是的,这会增加一点内存开销。

第 2 步:让类存储共享成员的浅拷贝而不是深拷贝。

如果您的类不是不可变的,则此技术会变得更加复杂,但基本思想仍然可行。

请注意,这确实减少了内存占用,但也会减少内存引用的空间局部性。这可能会显着降低您的程序速度。它还添加了一个额外的间接层。

关于c++ - 给定三个*略*不同的类对象拷贝,我如何有效地存储它们之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4870902/

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