어떤 점이 위험한지 손파일리 해보자.
#include <iostream>
int* foo() {
int a = 11;
int* pa = &a;
std::cout << "in foo() *pa=" << *pa << std::endl;
return pa;
}
int main() {
int* pa = nullptr;
pa = foo();
std::cout << "main() *pa=" << *pa << std::endl;
// delete(pa); (1)
return 0;
}
(1) 코드의 주석을 풀고 돌려보자.
항상 메모리를 해제하라는 습관을 들이라 그래서, 사용후 해제했더니, 발생하는 이 경고창은 뭘까?
오히려 delete를 안해주면 경고 1개 뿐이었는데, 왜 이런 에러가 날까?
존재 하지 않는 메모리를 삭제하려고 했기 때문이다.
댕글링 포인터를 제거하면 문제는 사라지지만 매우 번거로와 진다.
그래서 참조를 반환하지 말라는 거다.