안녕하세요 ?
C# 에서 부모 클래스를 상속 받고 있는 객체를 생성 했을때
해당 부모 클래스의 생성자에서 예외가 발생되면 힙영역에 할당 되지도 않는것이 맞나요?
제가 다음과 같이 코드를 작성하고 디버그 상태로 확인을 해보았습니다.
public class Account
{
private string _id;
public Account(string id, int pass) {
if(id != "abc" || pass != 1234)
{
throw new Exception("인증오류");
}
_id = id;
}
public void 출금(long amount)
{
Console.WriteLine($"{_id} 계좌에서 {amount} 출금됨.");
}
}
// Account를 상속
public class AttackAccount : Account
{
public AttackAccount(string id, int pass) : base(id, pass)
{
}
~AttackAccount()
{
this.출금(10000);
}
}
그리고 AttackAccount를 다음과 같이 생성 및 사용 하였습니다.
AttackAccount attackAccount = null;
try
{
attackAccount = new AttackAccount("???", 1);
}
catch (Exception ex)
{
//
}
GC.Collect();
GC.WaitForPendingFinalizers();
디버그로 실행시 당연히 오류가 발생되어 catch로 예외처리가 되고
잠시후에(실제 다른 이벤트 작업들이 처리 되면서(버튼 클릭 등)) AttackAccount 인스턴스의 소멸자가 호출 되는것을 확인했습니다.
소멸자가 호출되면서 출금 메서드도 정상적으로 호출 되었구요
디버그 모드라서 좀 다르게 동작된 것일까요?
내부적으로 어떻게 처리가 된건지 궁금합니다.
[최초 등록일: ]
[최종 수정일: 4/11/2023]