Q&A

  • destructor에서요..Destroy와 Free와의 차이점..
안녕하세요.질문 또 할께요..



컴포넌트 상속하는 걸 하구 있는데요..



constructor와 destructor을 만들다가..궁금한게 있었는데..



destructor은 거의 메소드이름이..Destroy이더라구요..Free인줄 알았는데..



보통 Destroy라고 쓰는 메소드와 Free라고 쓰는 메소드의 차이점을 알고 싶습니다.



3  COMMENTS
  • Profile
    최용일 2001.03.13 04:44
    안녕하세요. 최용일입니다.



    Destroy는 객체의 destructor(소멸자)로써 객체를 메모리에서 제거하는 역활을하는



    특별한 메소드입니다. constructor(생성자)인 Create와는 반대되는 메소드이죠...



    이 메소드는 자신이 nil인가를 체크하지 않습니다. 그렇기 때문에 이 메소드를 직접



    호출했을때 그 객체가 nil인 경우는 심각한 문제가 생길수 있습니다. Free 메소드는



    그 자신이 nil인가를 체크해서 nil이 아닐경우 Destroy를 호출해서 메모리에서 객체를



    제거하게 합니다.



    procedure TObject.Free;

    begin

    if (Self <> nil)

    Destroy;

    end; // 원래의 소스는 어셈블리로 되어 있지만 델파이구문으로 바꾸면 위와 같은 코드입니다.



    ^^ 항상 즐코하세요...



    어린왕자 wrote:

    > 안녕하세요.질문 또 할께요..

    >

    > 컴포넌트 상속하는 걸 하구 있는데요..

    >

    > constructor와 destructor을 만들다가..궁금한게 있었는데..

    >

    > destructor은 거의 메소드이름이..Destroy이더라구요..Free인줄 알았는데..

    >

    > 보통 Destroy라고 쓰는 메소드와 Free라고 쓰는 메소드의 차이점을 알고 싶습니다.

    >

  • Profile
    어린왕자 2001.03.13 20:41
    글면여..용일님..

    소멸자에 Free라는 이름을 써서..

    가지고 있는 컴포넌트들을 Free를 시켜줘두 되나여?



    별문제 없나여?







    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > Destroy는 객체의 destructor(소멸자)로써 객체를 메모리에서 제거하는 역활을하는

    >

    > 특별한 메소드입니다. constructor(생성자)인 Create와는 반대되는 메소드이죠...

    >

    > 이 메소드는 자신이 nil인가를 체크하지 않습니다. 그렇기 때문에 이 메소드를 직접

    >

    > 호출했을때 그 객체가 nil인 경우는 심각한 문제가 생길수 있습니다. Free 메소드는

    >

    > 그 자신이 nil인가를 체크해서 nil이 아닐경우 Destroy를 호출해서 메모리에서 객체를

    >

    > 제거하게 합니다.

    >

    > procedure TObject.Free;

    > begin

    > if (Self <> nil)

    > Destroy;

    > end; // 원래의 소스는 어셈블리로 되어 있지만 델파이구문으로 바꾸면 위와 같은 코드입니다.

    >

    > ^^ 항상 즐코하세요...

    >

    > 어린왕자 wrote:

    > > 안녕하세요.질문 또 할께요..

    > >

    > > 컴포넌트 상속하는 걸 하구 있는데요..

    > >

    > > constructor와 destructor을 만들다가..궁금한게 있었는데..

    > >

    > > destructor은 거의 메소드이름이..Destroy이더라구요..Free인줄 알았는데..

    > >

    > > 보통 Destroy라고 쓰는 메소드와 Free라고 쓰는 메소드의 차이점을 알고 싶습니다.

    > >

  • Profile
    최용일 2001.03.13 20:58
    가능합니다. 델파이 4.0부터 메소드 override를 지원하기 때문에 다수의 생성자/소멸자를



    가지게 할 수 있습니다. 그런데 모든 델파이 클래스는 TObject에서 파생되는거 아시죠?



    그렇기 때문에 Free를 소멸자로 만들려면 TObject가 가지는 Free메소드와 인자와 인자형



    이 다르게 만들어 주시면 됩니다.



    어린왕자 wrote:

    > 글면여..용일님..

    > 소멸자에 Free라는 이름을 써서..

    > 가지고 있는 컴포넌트들을 Free를 시켜줘두 되나여?

    >

    > 별문제 없나여?

    >

    >

    >

    > 최용일 wrote:

    > > 안녕하세요. 최용일입니다.

    > >

    > > Destroy는 객체의 destructor(소멸자)로써 객체를 메모리에서 제거하는 역활을하는

    > >

    > > 특별한 메소드입니다. constructor(생성자)인 Create와는 반대되는 메소드이죠...

    > >

    > > 이 메소드는 자신이 nil인가를 체크하지 않습니다. 그렇기 때문에 이 메소드를 직접

    > >

    > > 호출했을때 그 객체가 nil인 경우는 심각한 문제가 생길수 있습니다. Free 메소드는

    > >

    > > 그 자신이 nil인가를 체크해서 nil이 아닐경우 Destroy를 호출해서 메모리에서 객체를

    > >

    > > 제거하게 합니다.

    > >

    > > procedure TObject.Free;

    > > begin

    > > if (Self <> nil)

    > > Destroy;

    > > end; // 원래의 소스는 어셈블리로 되어 있지만 델파이구문으로 바꾸면 위와 같은 코드입니다.

    > >

    > > ^^ 항상 즐코하세요...

    > >

    > > 어린왕자 wrote:

    > > > 안녕하세요.질문 또 할께요..

    > > >

    > > > 컴포넌트 상속하는 걸 하구 있는데요..

    > > >

    > > > constructor와 destructor을 만들다가..궁금한게 있었는데..

    > > >

    > > > destructor은 거의 메소드이름이..Destroy이더라구요..Free인줄 알았는데..

    > > >

    > > > 보통 Destroy라고 쓰는 메소드와 Free라고 쓰는 메소드의 차이점을 알고 싶습니다.

    > > >