当我执行以下操作时,我发现紧密循环中存在巨大的性能差异:
MyObject foo = bar.GetObject();
VS
MyObject* foo = bar.GetObjectPtr();
类功能的细节是:
class MyClass
{
MyObject someobject;
MyObject& GetObject() { return someobject; }
MyObject* GetObjectPtr() { return &someobject; }
} bar;
第一行中的赋值比第二行慢得多。有人可以解释发生了什么吗?这是否与默认的副本分配有关?
答案 0 :(得分:5)
具体来说,
发布的代码中的真实问题是提出的大规模封装违规。
答案 1 :(得分:2)
如果您发布的内容确实是您测试的代码,那么您的测试方法肯定存在问题,因为几乎任何现代编译器都会为这两种变体生成相同的代码(当然,没有任何性能差异,当然)。
如果您正在测试其他内容,则必须提供有关测试的更多详细信息。