>백엔드 개발 >C++ >C에서 참조 또는 포인터로 전달해야 하는 경우: 지도 원칙?

C에서 참조 또는 포인터로 전달해야 하는 경우: 지도 원칙?

Patricia Arquette
Patricia Arquette원래의
2024-11-12 16:31:01778검색

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)?

포인터 대 참조

참조로 전달하면 모든 객체가 참조로 처리될 수 있으므로 일관성이 제공됩니다. 그러나 포인터를 전달하면 nullptrs 및 리터럴을 처리할 수 있는 유연성이 제공됩니다.

스니펫 분석

주어진 스니펫:

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

은 필요성을 강조합니다. 참조와 두 가지 속성을 모두 고려합니다. 포인터:

  • 맵 키는 참조를 사용하여 메모리 효율성을 보장합니다.
  • 벡터 포인터는 동적 할당을 허용하여 벡터 추가를 용이하게 합니다.

Rule of Thumb

결국 적절한 선택은 구체적인 상황에 따라 다릅니다. 요구 사항. 지침 원칙으로 다음을 고려하십시오.

  • 참조 사용: 효율적인 메모리 사용을 위해 그리고 참조된 객체에 대한 액세스가 보장되는 경우.
  • 사용 포인터: nullptrs를 처리할 때, 동적 메모리로 작업할 때 또는 참조를 수정해야 할 때

위 내용은 C에서 참조 또는 포인터로 전달해야 하는 경우: 지도 원칙?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.