하여 로컬 개체를 반환 ++,하지만 난 다음 무엇을 이해할 수 없다 :C 나는이 질문이 몇 가지 (백만) 번 요청을받은 것을 알고 참조
나는이 같은 함수가있는 경우 :
Object &function()
{
Object obj;
return obj;
}
을
하고이를 호출하는 클라이언트 코드 : 나는 참조 의미로 OBJ를 반환하고있어, 그 객체가되는 즉시 (종료 중괄호 후) 범위를 벗어나 파괴되기 때문에 그 나쁜
Object newObject = function();
. 하지만 로컬 객체를 콜 사이트의 새 객체에 전달할 때 안전하지 않아야합니까? 개체가 사라 졌을 때 복사 생성자에 의해 복사되지 않아야합니까? 알콜 객체에 대한 포인터를 전달하는 것은 나쁘다. (값에 의해) (로컬) 포인터가 범위를 벗어나면 (스택 프레임이 없어지면) 쓰레기를 가리키는 포인터의 위치를 전달할 것이기 때문이다. ? 코드가 다음과 같이 동일하지 않습니다.
Object &temp = obj;
Object newObject = temp;
? 설명 해주십시오.
EDIT 위와 같은 질문을하지 않는 것이 동일한 것입니다. 나는 왜 내가 로컬에 대한 포인터를 리턴하지 말아야하는지, 그리고 호출 사이트에서 참조를 초기화하기 위해 로컬에 대한 참조를 리턴 할 필요가 없다는 것을 충분히 이해한다. 내가 이해할 수없는 것은 호출 사이트에서 객체를 초기화하기 위해 로컬에 대한 참조를 사용할 수없는 이유입니다. 나는 그렇게 사소하지 않다고 생각한다.
차이점은 두 번째 예에서'newObject'를 만들 때'obj'가 여전히 존재합니다. 첫 번째 예제에서는'newObject'를 만들기 전에'obj'가 이미 존재하지 않습니다. 이 함수는 결과가 newObject에 할당되기 전에 변수를 완전히 반환하고 지 웁니다. –
[The Definitive C++ Book Guide and List] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)를 참조 할 필요가있는 것 같습니다. –
아니요, 함수가 반환되기 전에 객체가 파괴되기 때문에 * 전에 * 할 수는 없지만 * 않습니다. –