ringa_lee2017-04-17 15:31:27
에서 반환된 값은 물론 복사되었습니다. 믿을 수 없다면 GetcomputerFishes
의 반환 값을 변경하여 this->computerFishes
의 데이터가 일치하는지 확인할 수 있습니다
天蓬老师2017-04-17 15:31:27
주소는 왜 다른가요?
GetcomputerFishes
함수의 반환 값 유형은 vector<ComputerFish *>
, 즉 값으로 반환되는 동시에 반환 문의 표현식은 computerFishes
이므로 여기서는 임시 객체가 복사되고 먼저 생성된 다음 임시 객체가 반환됩니다(참고: 복사 생략으로 인해 이 임시 객체는 실제 런타임 중에 실제로 복사 및 생성되지 않을 수 있습니다). 즉, 반환되는 객체는 MyClass의 멤버변수가 아니고, 이 멤버변수를 복사하여 생성한 임시객체이므로 주소가 다르다. (참고: 값으로 호출할 때 표현식 유형은 rvalue입니다. 사용자 코드는 반환 값의 주소를 직접 가져올 수 없습니다. 즉, &x.GetcomputerFishes()
할 수 없습니다. 하지만 lvalue로 변환한 후 주소를 가져올 수 있습니다.)
GetcomputerFishes에서 반환된 개체를 ComputerFishes로 만드는 방법은 무엇입니까?
이 함수가 MyClass의 전용 멤버인computerFishes를 반환하도록 하려면 참조로 반환을 사용할 수 있습니다.
으아악이 함수 오버로드 세트는 각각 const MyClass 객체와 non-const MyClass 객체에 대한 지원을 제공합니다.
그런 다음 반환 값을 사용하여 참조 변수를 초기화할 수 있습니다(비참조 변수를 초기화하고 초기화 복사할 수도 있음).
으아악물론 함수 반환 값을 통해 직접 액세스할 수도 있습니다.
으아악