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

时间:2011-08-29 07:44:29

标签: c++ pointers reference

给出以下代码:

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

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

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

哪个更好,为什么?

2 个答案:

答案 0 :(得分:1)

在这两种情况下,您都可以发送相同的值,但只需坚持使用当前代码就更好了,因为它没有指针取消引用和new。完成后,您需要处理delete对象,我认为您不需要它。

最好在MyClass &object const函数中使用method,以便传入的引用不会被更改。

答案 1 :(得分:0)

如果您需要对象的持续时间超过其调用函数的范围,则使用new(以及一般的动态内存分配)会更好。如果只是已知持续时间的MyClass myC;本地范围版本最好(因为它更易于阅读和维护)。

使用new您的对象时,在致电delete之前,不会删除“myC”。

但是,如果您只是将其定义为本地对象,则当它超出范围时将被删除:

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