Как лучше всего передать ссылку на функцию? - PullRequest
0 голосов
/ 29 августа 2011

Учитывая следующий код:

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

В чем разница между способом IВызвали myC.method в main выше, и этот альтернативный способ сделать это:

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

Что лучше и почему?

Ответы [ 2 ]

1 голос
/ 29 августа 2011

В обоих случаях вы можете отправить одно и то же значение, но лучше придерживаться текущего кода, так как он без разыменования указателя и new.Вам нужно позаботиться о delete 'объекте, как только вы закончите с ним, что, я думаю, вам здесь не нужно.

И лучше использовать MyClass &object const в функции methodчтобы передаваемая ссылка не менялась.

0 голосов
/ 30 августа 2011

Использование new (и динамическое выделение памяти в целом) лучше, если вам нужно, чтобы объект работал дольше, чем область вызываемой функции. Если это просто на известную длительность, лучше всего использовать локальную версию MyClass myC;. (потому что его легче читать и поддерживать).

При использовании new ваш объект "myC" не будет удален, пока вы не вызовете delete.

Однако, если вы просто определите его как локальный объект, он будет удален, когда выйдет из области видимости:

{
 MyClass myC;
 myC.DoSomeStuff();
} // It'll be destroyed here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...