«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Когда передавать по ссылке или указателю в C++: руководящий принцип?

Когда передавать по ссылке или указателю в C++: руководящий принцип?

Опубликовано 15 ноября 2024 г.
Просматривать:338

When to Pass by Reference or Pointer in C  : A Guiding Principle?

Передача по ссылке или указателю в C: руководящий принцип

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

Общие ситуации

  • Передача std::string в функцию:

    • foo(std::string*) или foo(std::string&)?
  • Передача tr1::shared_ptr в функцию:

    • foo(tr1::shared_ptr* ptr) или foo(tr1::shared_ptr& ptr)?

Указатели против ссылок

Передача по ссылке обеспечивает согласованность, поскольку каждый объект можно рассматривать как ссылку. Однако передача по указателю обеспечивает гибкость обработки нулевых значений и литералов.

Анализ фрагмента

Данный фрагмент:

map> > adjacencyMap;
vector* myFriends = new vector();
myFriends->push_back(string("a"));
myFriends->push_back(string("v"));
myFriends->push_back(string("g"));
adjacencyMap["s"] = shared_ptr >(myFriends);

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

  • Ключи карты используются ссылки, гарантируя эффективность использования памяти.
  • Указатель на вектор допускает динамическое выделение, облегчая сложение векторов.

Практическое правило

В конечном счете, соответствующий выбор зависит от конкретных требований. В качестве руководящего принципа рассмотрите следующее:

  • Используйте ссылки: Для эффективного использования памяти и при гарантированном доступе к объекту, на который ссылаются.
  • Используйте указатели: При обработке nullptrs, работе с динамической памятью или когда вам нужно изменить сами ссылки.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3