我正在开发一个应用程序,我在其中定义了多个算法来处理一组数据,具有通用形式:
将[算法[k]]应用于[i]处的数据并保存在[o]处
缩小我的疑问:
a) 输入和输出可能是同一个对象,例如对图像应用高斯滤波器时。
b) 算法有可能解析为空操作,例如将数据数组插值到其他相同大小的数据时。
当(a)和(b)同时发生时,算法的以下部分
o[output_position]=process(i[input_position]);
会下定决心
o[output_position]=o[output_position];
这样安全吗?
一些不完善的推理:
我认为是的,主要是因为(但我对这个假设没有信心)内存到内存的移动解析为内存到寄存器到内存的移动。
它适用于一些简单的测试,但我没有知识可以对别人说“看看我设计良好的代码”。
我计划使用优化标志进行编译并继续进行项目的其他部分,所以我担心在未来的某个地方事情会变得糟糕,并且在调试器上度过另一个美好的一天来跟踪这个 self 分配。
提前致谢。
最佳答案
这完全取决于 o[output_position]
的类型。如果它正确地实现了赋值运算符,那就没问题了。正确实现的赋值运算符始终可以很好地处理自赋值。
C++ 中赋值运算符的惯用实现使用 copy-and-swap idiom .这意味着正确的自赋值,即使没有您经常在其他实现中看到的 this != &other
检查。
关于c++ - 算法能否安全地解决输入到输出的 self 分配问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22820042/