1

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

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;
 }
4

1 回答 1

1

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

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

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

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

于 2016-10-29T17:57:36.617 回答