有效地传递物体?

时间:2016-10-29 17:48:11

标签: c++ reference raw-pointer

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

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

1 个答案:

答案 0 :(得分:1)

如果您不需要修改对象,请通过 const引用传递它。

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

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

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