如何最好地传递对函数的引用

How best to pass a reference to a function?

本文关键字:函数 引用 何最好      更新时间:2023-10-16

给定以下代码:

[example.h]

class MyClass
{
public:
    MyClass();
    std::string name;
    std::string address;
    bool method (MyClass &object);
};
[example.cpp]
MyClass::MyClass()
{
}
bool MyClass::method (MyClass &object) {
  try {
      object.name = "New Name";
      std::cout << "Name: " << object.name << " " << object.address << std::endl;
      return true;
  }
  catch (...) {
      return false;
  }
}
[test.cpp]

#include "example.h"
int main()
{
    MyClass myC;
    myC.address = "address";
    bool quest = myC.method(myC);
}

我在上面的main中调用myC.method的方式与这种替代方式有什么区别:

MyClass *myC = new MyClass(); 
bool quest = myC.method(*myC); 

哪个更好,为什么?

在这两种情况下,你可以发送相同的值,但简单地坚持当前的代码是更好的,因为它没有指针解引用和new。一旦你用完这个对象,你需要注意delete ' ',我认为你在这里不需要。

最好在method函数中使用MyClass &object const,这样传入的引用就不会被改变。

如果您需要对象的持续时间超过调用它的函数的作用域,则使用new(通常是动态内存分配)是更好的选择。如果只是在一个已知的持续时间内,MyClass myC;本地作用域版本是最好的(因为它更容易读取和维护)。

当使用new时,对象"myC"不会被删除,直到你调用delete

但是如果你只是将它定义为一个局部对象它将在超出作用域时被删除:

{
 MyClass myC;
 myC.DoSomeStuff();
} // It'll be destroyed here