C++에서는 함수의 매개변수(메서드의 멤버 포함)를 다음과 같이 전달할 수 있습니다:
예:
void foo(int value); // 값 전달 void foo(int* ptr); // 포인터 전달 void foo(const int& ref); // 참조 전달 (큰 객체에 최적!)
참조로 전달 시 최적화(복사 생략)가 가능하고 큰 객체에는 const &를 권장합니다. 포인터를 사용할 때는 항상 nullptr를 확인하세요.
함수 매개변수에서
const MyClass& obj와MyClass obj의 차이점은 무엇인가요?
답변:
const MyClass&는 객체를 복사하지 않고 변경할 수 없는 접근을 제공합니다(큰 객체에 최적). MyClass obj는 항상 복사본을 만들기 때문에 큰 크기일 때나 올바른 복사 구현(예: 깊은 복사 없음)이 없을 때 비용이 큽니다.
void process(const std::string& s); // 복사하지 않음 void process(std::string s); // 복사함
이야기 기업의 수학 구조 라이브러리에서 프로그래머는 큰 컨테이너를 값으로 전달하여 작업 속도를 높이려고 했습니다. 이로 인해 각 함수 호출 시 상당한 오버헤드가 발생하여 성능이 절반으로 떨어졌습니다.
이야기 사용자 관리 모듈에서 nullptr에 대한 검사를 하지 않은 포인터를 사용했습니다. 때때로 유효하지 않은 포인터에 접근할 때 무작위 오류가 발생하여 디버깅에 몇 달이 걸렸습니다.
이야기 이미지 처리 프로젝트의 일부 함수는 객체를 값으로 받고 일부는 참조로 받았습니다. 하나의 클래스에서 깊은 복사가 구현되지 않아 메모리가 새고 자원을 암묵적으로 공동 소유하게 되었습니다.