2
A
답변
5
Ada.Finalization.Controlled 또는 Limited_Controlled에서 파생 된 하나 이상의 레코드에서 파이널 라이즈에 참여한 개인 멤버를 래핑합니다. 보호 오브젝트가 마무리되면 해당 개인 회원도 이에 따라 완결됩니다. (!) :
with Text_IO; use Text_IO;
with Ada.Finalization;
with Ada.Containers.Ordered_Maps;
with Ada.Unchecked_Deallocation;
procedure Protected_Final is
Instance_Counter : Natural := 1;
package Int_Map is new Ada.Containers.Ordered_Maps (Integer, Integer);
subtype Map is Int_Map.Map;
type Map_Wrapper is new Ada.Finalization.Controlled with record
ID : Natural;
M : Map;
end record;
overriding procedure Initialize(Item : in out Map_Wrapper);
overriding procedure Finalize(Item : in out Map_Wrapper);
procedure Initialize(Item : in out Map_Wrapper) is
begin
Item.ID := Instance_Counter;
Instance_Counter := Instance_Counter + 1;
Put_Line("Initialize the Map part as instance" & Natural'Image(Item.ID));
end Initialize;
procedure Finalize(Item : in out Map_Wrapper) is
begin
Put_Line("Clean up the Map stuff for instance" & Natural'Image(Item.ID));
end Finalize;
protected type A is
procedure Foo;
private
M : Map_Wrapper;
end A;
protected body A is
procedure Foo is
begin
null;
end Foo;
end A;
Test_Item : A;
type A_Handle is access A;
procedure Free is new Ada.Unchecked_Deallocation(A, A_Handle);
Test_Item_Handle : A_Handle;
begin
Test_Item_Handle := new A;
Free(Test_Item_Handle);
end Protected_Final;
내가 얻을이 실행 :
는 "외부"초기화/정리 메시지가 올C:\sandbox\protected_final
Initialize the Map part as instance 1
Initialize the Map part as instance 2
Clean up the Map stuff for instance 2
Clean up the Map stuff for instance 1
[2011-03-04 08:37:29] process terminated successfully (elapsed time: 00.21s)
정적 Test_Item를 선언의 결과
여기에 빠르고 작업 예제 인스턴스 인 반면 내부 쌍은 동적으로 할당되고 할당이 해제 된 Test_Item_Handle에서옵니다.
관련 문제
- 1. 에이다 : 상수 선언
- 2. 주어진 메모리 페이지에서 보호 기능을 찾으려면 어떻게합니까?
- 3. 트랜잭션 concurency 보호 (트랜잭션 유형, 트랜잭션 IsolationLevel)
- 4. 보호 카운터보기는
- 5. 구독 보호 콘텐츠?
- 6. 암호 보호
- 7. 페이지 보호
- 8. csrf 보호
- 9. 자녀 보호
- 10. 사진 폴더 보호
- 11. Git에서 파일 보호
- 12. 소스 코드 보호 섹션
- 13. "보호 된 내부"범위
- 14. 엑셀 파일 보호
- 15. 다운로드 용 파일 보호
- 16. 화면 보호 기능을위한 설정?
- 17. Cython, 보호 된 속성
- 18. 가상 컴퓨터로부터의 보호
- 19. erronous 입력으로부터 보호
- 20. 외부 호출로부터 파일 보호
- 21. 스프레드 시트의 서식 보호
- 22. 오디오 암호화/보호
- 23. PHP - 디지털 다운로드 보호
- 24. 어떻게 내가 PPT 파일을 보호 passsword되어 있는지 확인하려는 암호로 보호 된 PPT 및 PDF
- 25. MMU없이 메모리 보호
- 26. 상속 #/개인 보호 회원
- 27. 비밀번호로 보호 된 웹 페이지로드
- 28. 자동화에 대한 보호
- 29. Java에서 USB 드라이브 보호
- 30. 내 HTML의 DIV 보호
내가 리눅스에서 valgrind를 통해 이것을 실행할 때 '여전히 도달 할 수있는'유형의 메모리 누수가 발생합니다! "여전히 도달 가능 : 1 블록에서 2,104 바이트"- 그 누수가 어디에서 왔는지 생각할 수 있습니까? – NWS