Either you use destructors, or you use ref with finalizers

Pseudo code

Destructors version 
    
    
    type NimBox = object
        handle: ptr Box
    
    proc `=`(dst: var NimBox, src: NimBox){.error: "Copying is not allowed".}
    
    proc `=destroy`(b: var NimBox) {.inline.}=
      release(b.handle)
    
    proc `=sink`(dst: var NimBox, src: NimBox) {.inline.} =
      `=destroy`(dst)
      `=sink(dst.handle, src.handle)
    
    proc newNimBox(size: int): NimBox =
      result.handle = box_new(size)
    
    
    Run

Ref version
    
    
    type
      NimBox = ref object
        handle: ptr Box
    
    proc finalize(b: NimBox) =
      if not b.isNil:
        release(b.handle)
    
    proc newNimBox(size: int): NimBox =
      new result, finalize
      result.handle = box_new(size)
    
    
    Run

Reply via email to