1
我想创建和初始化以下方式控制的类型(有点像一个厂)创建一个函数:创作控制型将调用finalize在返回
function Create return Controlled_Type
is
Foo : Controlled_Type;
begin
Put_Line ("Check 1")
return Foo;
end Create;
procedure Main
is
Bar : Controlled_Type := Create;
begin
Put_Line ("Check 2")
end Main;
output:
Initialize
Check 1
Adjust
Finalize
由于完成按钮将处置在控制类型I中指向的一些对象最终会在Bar中悬挂指针,并且不知何故,这会立即崩溃该程序,所以我从不会看到“Check 2”。
这可以通过使用新的Controlled_Type并在Create函数中返回一个指针来轻松解决。但是,我喜欢拥有受控类型的想法,而不是指向它的指针,因为当Bar超出范围时,会自动调用finalization。如果Bar是一个指针,我不得不手动处理它。
有什么办法可以正确地做到这一点,而不会结束悬挂指针?我应该在调整过程中做一些魔术吗?
非常感谢您为广大的答案,这真的帮助我了解如何实现调整程序。在我的具体情况下,我在主控制类型下有一个树形数据结构,需要一些递归调整过程,但最终它的功能就像一个魅力。 – FinalArt2005