비슷한 질문이 많을수록 제목이 익숙한 것으로 알고 있지만 문제의 다른 측면을 요구하고 있습니다 (스택에 물건을 두는 것과 더미에 넣는 것의 차이점을 알고 있습니다).
Java에서는 항상 "로컬"객체에 대한 참조를 반환 할 수 있습니다
public Thing calculateThing() {
Thing thing = new Thing();
// do calculations and modify thing
return thing;
}
C ++에서 비슷한 것을하기 위해 두 가지 옵션이 있습니다.
(1) 객체를 "반환"해야 할 때마다 참조를 사용할 수 있습니다
void calculateThing(Thing& thing) {
// do calculations and modify thing
}
그런 다음 이렇게 사용하십시오
Thing thing;
calculateThing(thing);
(2) 또는 동적으로 할당 된 객체에 대한 포인터를 반환 할 수 있습니다
Thing* calculateThing() {
Thing* thing(new Thing());
// do calculations and modify thing
return thing;
}
그런 다음 이렇게 사용하십시오
Thing* thing = calculateThing();
delete thing;
첫 번째 방법을 사용하면 수동으로 메모리를 비울 필요가 없지만 코드를 읽기가 어렵습니다. 두 번째 접근 방식의 문제점은을 기억해야한다는 것 delete thing;
입니다. 비효율적이기 때문에 복사 된 값을 반환하고 싶지 않습니다 (제 생각에). 여기에 질문이 있습니다.
- 세 번째 해결책이 있습니까 (값을 복사하지 않아도 됨)?
- 첫 번째 해결책을 고수하면 문제가 있습니까?
- 두 번째 솔루션을 언제, 왜 사용해야합니까?