의견란에 있는 것 처럼
우선 Class는 Create를 해주셔야 합니다.
Class에 대한 포인터 사용 자체에는 문제가 없습니다.
또한 원래 파스칼 문법에는 Inc(포인터)가 되지 않습니다.
델파이로 접어들면서 해보지 않아서 되는 지 모르겠네요.
High는 포인터에서 당연히 사용할 수가 없습니다.
포인터를 이용해서 갯수 및 인댁스 효과를 줄려면,
간단하게는 TList를 사용하시는 것을 권장합니다.
아니면, 포인터를 배열로 선언해서 사용하시고
각각의 인댁스 마다 원하시는 Class를 참조하게 하시면 됩니다.
사족으로 Class는 Object의 포인터처럼 활동 합니다.
(정확히 그렇다는 것은 아니고)
포인터처럼 Class도 Create로 메모리 할당을 해주지 않으면 안됩니다.
굳이 아래와 같이 코딩하시려면 Class대신 Object를 사용하세요.
Object는 구조체처럼 활동합니다.
(Create 안해도 된다는 뜻을 포함)
C++로해도 마찬가지로 class는 Create해주셔야겠지요.
최종적으로는 TList 사용을 고려해보세요.
Voice of Delphi, 류..
손동섭 님이 쓰신 글 :
: 아래 소스를 봐주세요
: 디버거로 추적해보면 [1]번이 실행되면 바로 [2]번으로 가서 실행되고 종료됩니다.
: 저는 객체의 포인터를 사용하고 싶어서 아래와 같은 샘플로 테스트 한것인데요...
:
: 객체를 10개 만들고 각각의 멤버에 값을 넣은후에
: 포인터를 원래위치로 복귀시킨다음 처음부터 넣은 값들은 확인하려고 합니다.
: 저는 C++에서 코딩하던 습관이 있어서 그냥 추측해서 해본건데...
:
: 사실 제가 원하는 동적 포인터에 관한 자료는 없더라구요 그래서 그냥 테스트 한것인데...
: Array처럼 High(Array Type) 포인터에서는 할수 있는 것은 없나요???
:
:
: program Project2;
:
: {$APPTYPE CONSOLE}
:
: uses
: SysUtils;
:
: type
: myClass = class
: public
: myInt : integer;
: myStr : string;
: end;
:
: var
: cPtr : ^myClass;
: Pos : Pointer;
: Cnt : integer;
: begin
: new(cPtr);
: Pos := cPtr;
:
: for cnt := 0 to 10 do
: begin
: cPtr^.myInt := cnt; <------------------------------- [1]
: cPtr^.myStr := IntToStr(cnt) + ' Str';
: Inc(cPtr);
: new(cPtr);
: end;
:
: Writeln('----------------');
: cPtr := Pos;
: for cnt := 0 to 10 do
: begin
: Write(cPtr^.myInt);
: Write(' : ');
: Writeln(cPtr^.myStr);
: Inc(cPtr);
: end;
:
:
: Readln;
: dispose(cPtr); <--------------------------------------- [2]
: end.
|