왜 if절 내에서 인스턴스를 참조 또는 생성하면 if절 끝나면 메모리 참조가 해제될까요?
예를 들어
namespace poly
{
class MainAPP
{
static void Main()
{
Father test;
if(a==1)
test = new Father();
Console.WriteLine(test.GetType());
}
}
}
이럴 때 [할당되지 않은 지역변수 test를 사용하였습니다] 컴파일 오류 뜸
if절 내에 들어가는 객체는 매개변수로 취급하는건가?
일반적인 데이터 타입도 마찬가지네 테스트 해보닌까
if절 내에서는 초기화가 불가능하네 ㅁㅊ;;;?
저걸 전역변수로 하면 돼지않을까요 - dc App
전역변수로 하면 프로그래밍 종료시까지 메모리 해제가 안되자나...
ㅇㅇㅇ// 저거 중간에 짤라내서 한거라 int a=1이라고 선언은 해놨다고 생각하세요
Console.WriteLine(test.GetType());
test가 NULL 로 초기화 시키면 상관없는데
if문에서 new로 할당하기때문에 if문을 안 거치는 경우 초기화 안되는것을 건드니깐 에러 뱉는거야
그냥 null로 초기화 하면 됨
ㅇㅇㅇ// 근데 또 웃긴게 if절 내에 Console.WriteLine(test.GetType()); 넣으면 작동함
당연하지 IF문에서 test 할당을 하니깐 test.GetType() 당연히 접근 가능하니 에러를 안 뱉는거지
if절내에서 초기화하면 if절내에서만 그 변수 초기화 된게 사용가능하고, if절 벗어나서는 변수 초기화된게 없던일로 되버리는게 신기함. c언어랑 자바도 이런가
미개한 C++은 포인터 초기화 안하고 접근하면 프로그램 뻗으면서 뒈짓하는데 C#은 미리 잡아준다고 생각하면 됨
ㅇㅇㅇ// 결론은 if절 내에서는 초기화하지 않은 데이터를 넣지말라는거네.. 초기화안한상태로 넣으면 if절내에서 초기화된 그값이 보전이 안된다. ㅇㅋ
if절내에서 초기화하면 if절내에서만 그 변수 초기화 된게 사용가능하고 ????? 아닌뎁? if문 밖에서 Father test; 선언햇으니 if문에서 초기화만 성공하면 벗어나서도 계속 사용가능함.
ㅇㅇㅇ// 해보닌까 안되던데 예를 들어 int a=3, int b; 이렇게 b초기화 안한상태에서 if절 내에서 b값 초기화 하고난뒤 if절 벗어나면 할당 안된상태로 됨