有效地传递对象?

Passing objects efficiently?

对于我的大部分程序,我一直通过引用传递对象:

MyClass
{
  public:
    auto DoStuff()->void
    {
      //Doing stuff...
     }
};

MySubClass
{
  public:
    auto CallFunction(MyClass &MCO)->void
    {
      MCO.DoStuff();
    }
};

int main()
{
  MyClass MCO;
  MySubClass MSCO;
  MSCO.CallFunction(MCO);
}

对于我不需要编辑的对象(只需调用它的函数),通过引用传递是否是内存效率最高的解决方案?

或者,或者使用原始指针?

MyClass
{
  public:
    auto DoStuff()->void
    {
       //Doing stuff...
    }
 };

 MySubClass
 {
   public:
     auto CallFunction(MyClass *MCO)->void
     {
       MCO->DoStuff();
     }
 };

 int main()
 {
   MyClass *MCO;
   MySubClass MSCO;
   MSCO.CallFunction(MCO);
   delete MCO;
 }

如果不需要修改对象,则通过const reference传递。

void CallFunction(const MyClass &MCO)
{
  MCO.DoStuff();
}

你通常应该选择基于语义的传递模型,而不是优化。通过 ref 或 const ref 传递对象。按值传递数据,并避免使用指针,除非您的编程模型需要它。在微优化方面,您几乎永远无法比编译器做得更好。

一旦您分析了您的程序并确定了瓶颈,您通常可以通过修改算法或数据存储方式来获得更大的收益。