> 백엔드 개발 > C++ > 본문

C에서 참조와 포인터를 언제 사용해야 합니까?

Linda Hamilton
풀어 주다: 2024-11-13 12:26:02
원래의
206명이 탐색했습니다.

When Should I Use References vs. Pointers in C++?

Passing by Reference vs. Pointer in C++

In C++, understanding when to use references and pointers can be a confusing topic. This article explores the nuances of passing by reference and by pointer, providing practical guidelines.

Pass by Reference:

Passing by reference is recommended when you need to:

  • Modify the actual value of the passed variable.
  • Pass complex objects (e.g., strings, vectors) efficiently, avoiding the overhead of copying.

Pass by Pointer:

Passing by pointer is necessary when:

  • You cannot pass a temporary object by reference (since a reference must bind to an existing object).
  • You need to pass a null pointer.
  • You need to change the pointer itself, not its target (e.g., assign a new value to the pointer).

Best Practices:

As a general rule, prefer passing by reference whenever possible. However, when dealing with literals, null pointers, or situations where you need to modify the pointer itself, pass by pointer.

Example:

The code snippet provided passes a pointer to a dynamically allocated vector to a map. This is a valid approach because we need to both create a new vector and pass it by reference to the map. By using pointers, we avoid the need to copy the entire vector.

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <tr1/memory>
#include <algorithm>
using namespace std;
using namespace std::tr1;

int main(){
        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);
        return 0;
}
로그인 후 복사

위 내용은 C에서 참조와 포인터를 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿