Зачем вам передавать интеллектуальный указатель в качестве аргумента функции в C ++?

Я очень новичок в интеллектуальных указателях C ++, и мне трудно понять этот совет, используя их для аргументов функций.

«Стандарты кодирования C ++: 101 правила, руководящие указания и рекомендации» говорят, что это причины, по которым следует указывать интеллектуальный указатель.

Предпочитаю проходить мимо (умного) указателя

  • если аргумент является необязательным (поэтому вызывающие абоненты могут передавать значение NULL как значение «недоступно» или «не важно»)
  • или если функция хранит копию указателя
  • или иным образом манипулирует владением аргументом.

Может кто-нибудь дать мне примеры каждого из них, и почему бы не использовать умный указатель было бы плохой идеей в этих случаях?

4

Решение

Предпочитаю проходить мимо (умного) указателя [когда …]

Я думаю, что вы неправильно читаете стандарт кодирования. Вы читаете это как «это причины использовать умный указатель». Автор намеревался «это причины использовать какой-то указатель, который может быть и умным указателем».

7

Другие решения

Предпочитаю проходить мимо (умного) указателя

Обратите внимание, как «умный» в скобках?

То, о чем здесь говорит человек, — это указатель или ссылка. В скобках есть «умный», потому что вы будете следовать схожим правилам, работая в команде, которая предпочитает умные указатели.

4

Я собираюсь предположить, что этот вопрос относится к указателям в целом, поскольку именно это объясняет цитируемый текст в вопросе.

Есть несколько причин, по которым вы хотели бы использовать умный указатель (или вообще старые добрые указатели). Первый и наиболее очевидный из них заключается в том, что когда вы передаете что-либо по ссылке или по указателю, вы передаете указатель на элемент в памяти, что означает, что вы получаете реальный объект, а не копию, как вы получаете при передаче по значению. Это полезно, когда вы хотите манипулировать объектом с помощью какой-либо функции или просто уменьшить копирование (представьте, что отправка большого текстового файла все время в качестве значения, это наверняка будет неэффективно!)

Далее, возможность передачи чего-либо как нулевого значения. В основном это означает, что параметр может быть передан как «не существует», что, в свою очередь, может быть обработано в логике. Например, если указатель файла равен нулю, создается новый файл.

В частности, для интеллектуальных указателей: интеллектуальные указатели — это указатели, которые имеют дополнительные алгоритмы управления, работающие за кулисами, это может быть подсчет ссылок или другие параметры. Например, вы можете использовать unique_pointer, чтобы убедиться, что в данный момент существует только один указатель на объект. Для получения дополнительной информации см. Википедию http://en.wikipedia.org/wiki/Smart_pointer

Если действительно вопрос связан с работой общих указателей, см. Также это введение http://www.tech-recipes.com/rx/1232/c-pointers-pass-by-value-pass-by-reference/

2

Умные указатели существуют для одной и только одной функции:

право собственности на аргумент

Интеллектуальные указатели применяют это так, чтобы вы не взялись за это, что весьма вероятно, так как ручное управление владением смехотворно подвержено ошибкам, тогда как интеллектуальные указатели гарантируют.

Нет другого оправдания для использования умного указателя на обычный указатель.

1
По вопросам рекламы [email protected]