LINUX.ORG.RU

в первом случае возвращается указатель,
во втором - ссылка. "лучше" зависит от
того, как собираетесь с этим работать.

idle ★★★★★
()

string * - указатель

string & - параметр-ссылка

как лучше это вопрос вкуса

sS ★★★★★
()
Ответ на: комментарий от anonymous

Если больше нравится/знаешь C - используй первый вариант

--- // ---- Java - второй

;)

ImHO c указателями меньше непоняток на предмет того с копией объекта ты работаешь али нет ;)

sS ★★★★★
()

string - это класс? Тогда второй способ плох, а первый не очень хорош для маленьких объектов. Лучше так:

string get_name();

Если делать со ссылкой, то неудобно создавать/удалять объекты динамически - придётся всё равно преобразовывать к указателю. Если делать с указателем, то динамическое выделение памяти делается без лишних, загромождающих код, преобразований, но для маленьких объектов это нафик не надо, потому что копирование экземпляров в третьем случае относительно дёшево и не требуется явного динамического выделения памяти. Однако, с указателем, если всё сделать по-уму, будет самый быстрый код, но с экземпляром - самый понятный. Так что, решай сам :)

watashiwa_daredeska ★★★★
()

> 1. string *get_name(); 
> 2. string &get_name() 
> 3. string get_name(); 

Дело вкуса, дело стиля программирования. 
Вопросы прозрачности кода при сопровождении.
2 и 3 - способы обычно применяют в функции operator=() или какой аналогичной.
1 - плохой стиль, его не применяют.

void getStringName(string & sourse);
void getStringName(string * sourse);

это нагляднее так как мы передаем ссылку или указатель на объект,
подразумевая что внутри функции произойдет изменение объекта,
но не будет выделена под него память, что не очевидно в 1.
string * get_name()
{ 
   return &string("hi");
} 
Этот фрагмент даст ошибку -> рассматривая в общем виде функции
возвращающие такой результат мы не можем предположить, что 
происходит в функции а значит код не прозрачный.

string * get_name()
{
  string * str = new string("hi");
  return  str;
}
Память принято выделять в том блоке, где она будет удаляться.
Это стиль не больше не меньше, но лучше стараться программировать
в "хорошем" стиле. (но это все спорно, что лучше а что нет).

Книжки: Маерс   и книжка  Ален,Голуб

Например ядро Linux - там главное производительность,
не до стиля. Но всеж.

anonymous
()

Не в стиле здесь больше дело а в функциональности:

в первом случае ты можешь вернуть NULL,
во втором нет. Как это тебя ограничивае - другой вопрос :)

salseeg
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.