The gintro README contains still a warning from early ARC days that users may have to declare their own destructors if the intent to subclass widgets:
<https://github.com/StefanSalewski/gintro#extending-or-sub-classing-widgets> But from a recent test I get the feeling that this is not really necessary any more. With modules tt.nim and t.nim I get: # module tt.nim type O1* = ref object of Rootref i*: int when defined(gcDestructors): proc `=destroy`(o1: var typeof(O1()[])) = echo "destroy O1 ", typeof(o1) Run module t.nim import tt type O2 = ref object of tt.O1 j: int type O3 = ref object o1: tt.O1 type O4 = object o1: tt.O1 proc main = var o1: tt.O1 new o1 echo o1.i var o2: O2 new o2 echo o2.j var o3: O3 new o3 new o3.o1 var o4: O4 new o4.o1 main() Run salewski@nuc /tmp/hhh $ ./t 0 0 destroy O1 O1:ObjectType destroy O1 O1:ObjectType destroy O1 O1:ObjectType destroy O1 O1:ObjectType Run So the destructor is always called for the parent base class, no need for users to declare own destructors any more. Is this new for latest Nim 1.4?