programing

물체를 파괴하는 방법

bestprogram 2023. 6. 11. 11:05

물체를 파괴하는 방법

는 것 같습니다.Set Object = Nothing파괴하지 않았습니다.Fs이 코드의 개체:

Sub Test2()
    Dim Fs As New FileSystemObject
    Set Fs = Nothing
    MsgBox Fs.Drives.Count ' this line works
End Sub

마지막 줄은 오류 없이 작동합니다!그것은 의미합니다.Fs개체가 아직 존재합니다. 그렇죠?

그래서 이것을 파괴하는 방법.Fs물건.

물체의 적절한 파괴를 보장하는 또 다른 방법은 물체의 참조를 양보하는 것입니다.Withblock(즉, 로컬 변수를 선언하지 않음):

Sub Test()
    With New FileSystemObject
        MsgBox .Drives.Count
    End With
End Sub

개체는 항상 내부에만 존재합니다.With블록, 그리고 실행이 다음에 도달할 때.End With토큰, 만약 당신이 그것을 사용자 정의 클래스 모듈과 함께 시도한다면 당신은 그 클래스가Class_Terminate처리기가 실행되어 개체가 제대로 파괴되었는지 효과적으로 확인합니다.

에 대해서는As New이미 설명했듯이, 만약 당신이 대상 참조를 설정할 의도가 있다면.Nothing그 범위 내에서, 그것을 선언하지 마세요.As NewVBA가 객체 참조를 설정할 것이기 때문입니다.Nothing그러나 다시 참조하는 즉시 새 인스턴스를 생성할 수 있습니다("도움이 되는"). 단지 개체를 확인하는 것뿐입니다.Is Nothing.

참고로, 러버덕객체 변수가 자체 할당된 코드 검사라는 추론 뒤에 있는 것은 특히 이 (귀찮게 느껴지는) 직관적이지 않은 행동입니다.

RD 웹사이트 점검 결과

(참고: 검사할 코드가 있는 경우 웹 사이트보다 실제 VBE에서 훨씬 더 빠르게 실행됩니다.)

(이미 명확하지 않은 경우:저는 러버덕 프로젝트에 깊이 관여하고 있습니다.)

대부분 "피해야 할" 패턴으로 처리되는 "피해야 할" 패턴과 관련이 있어야 합니다.

그것들을 나누면, 당신은 얻을 수 있습니다.Nothing다음으로 설정한 후:

Sub Test2()
    Dim Fs As FileSystemObject
    Set Fs = New FileSystemObject
    Set Fs = Nothing
    MsgBox Fs.Drives.Count ' this line DOESN'T work
End Sub

이 수정된 코드는 잘 작동하는 것 같습니다.동일한 라인에서 희미한/새로운 뉘앙스로 보입니다.다른 누군가가 그 추론에 대해 더 나은 아이디어를 줄 수 있기를 바랍니다.

다른 사람들이 언급한 것처럼 서브 내에서 희미한 경우 서브가 완료된 후 수집됩니다.

Sub Test2()
    Dim Fs As FileSystemObject
    Set Fs = New FileSystemObject
    Set Fs = Nothing
End Sub

언급URL : https://stackoverflow.com/questions/42164719/how-to-destroy-an-object