안녕하세요.
델파이에서 객체의 할당은 객체의 레퍼런스를 할당하는 것으로 압니다.
즉,
InstA, InstB : TMyClass;
라는 두개의 TMyClass의 인스턴스가 있다면,
InstA := TMyClass.Create;
InstB := InstA;
라고 했을 경우, InstB는 InstA의 객체를 가리키게(!) 된다는 거죠.
여기서 몇가지 궁금한 점이 있습니다.
첫째,
InstA := TMyClass.Create;
InstB := TMyClass.Create;
InstB := InstA;
라고 했을 경우, InstB가 InstA와 같은 객체 인스턴스를 가리키게 되므로,
두번째 라인에서 생성했던 InstB가 가리키고 있던 객체는 어떻게 되는지요?
아무도 참조하지 못하므로, Memory Leak이 생기게 되는지 궁금하구요.
둘째,
InstB에 InstA를 복사 하고 싶을 경우는 어떻게 해야 할런지요?
즉, 각 멤버변수들을 다 복사하고 싶을 경우말입니다.
저같은 경우 현재는,
InstA := TMyClass.Create;
InstB := TMyClass.Create;
InstB.FVar1 := InstA.FVar1;
InstB.FVar2 := InstA.FVar2;
...
이런 식으로 복사를 하는데여.
좀 불편하더라구요.
먼가 더 좋은 방법이 없을런지요?
델파이에서는 operator overloading을 지원하지 않는 거 같더라구요.
위의 문제를 해결할 방법이 특별히 생각이 나지 않습니다.
많은 분들의 도움 부탁드립니다.
감사합니다. ^.^
처음 시작하시나 보군여..^^
조은 질문 임다..^^
우선 기본 개념이 약하신거 가튼데..
"인스턴스"는 Win32가 어떤 객체에 할당한 메모리를 말합니다.
"객체"는 Win32가 메모리를 할당한 것을 말합니다..
"레퍼런스"는 말 그대로 "참조"를 의미하며 컴에선 일반적으로 내용값을 의미합니다.
글구 클래스 선언은 클래스의 첫번째 메모리의 어드레스를 설정한다고 보시면 됩니다.
operator, overloading은 일반적으로 예약어를 다른 걸루 디파인 하는데 주로 쓰이고
VC++에선 함수도 디파인 할수 있져..
질문의 요지는 함수의 디파인인거 같군여..
델파이에서는 overload 확장자를 사용합니다.
예) procedure SomeFunc(..); overload;
음.. 또..
> 첫째,
>
> InstA := TMyClass.Create;
> InstB := TMyClass.Create;
> InstB := InstA;
>
> 라고 했을 경우, InstB가 InstA와 같은 객체 인스턴스를 가리키게 되므로,
> 두번째 라인에서 생성했던 InstB가 가리키고 있던 객체는 어떻게 되는지요?
> 아무도 참조하지 못하므로, Memory Leak이 생기게 되는지 궁금하구요.
맞습니다.. 메모리 릭입니다.. InstB가 가리키는 객체를 접근할 방법이 없습니다..
그건 다른 언어에서도 마찬가집니다.. 기냥 메모리만 차지하는 거져..
방법을 알아낸다면, C, C++ 보다 차원이 높은 언어가 만들어지고, 역사에 남겠져..
> 둘째,
>
> InstB에 InstA를 복사 하고 싶을 경우는 어떻게 해야 할런지요?
> 즉, 각 멤버변수들을 다 복사하고 싶을 경우말입니다.
> 저같은 경우 현재는,
>
> InstA := TMyClass.Create;
> InstB := TMyClass.Create;
> InstB.FVar1 := InstA.FVar1;
> InstB.FVar2 := InstA.FVar2;
> ....
> 이런 식으로 복사를 하는데여.
> 좀 불편하더라구요.
> 먼가 더 좋은 방법이 없을런지요?
더 조은 방법은 없습니다.. 다른 언어들도 클래스는 위와 가치 합니다..
가령 Assign() 함수가 내부적으로 위와 같은 코딩을 가지고 있습니다..
이거 역쉬, 클래스 변수를 한번에 카피하는 방법을 알아낸다면,
C/C++ 의 다음 언어인 C++* 이 만들어 지고, 떼돈을 벌거라구 생각됩니다..
즐푸하세여..
타락천사..