Let's have a code example. When I'm using ref object of ... This code:
    
    
    type
      Animal = ref object of RootObj
        name: string
    
    method makeNoise(this: Animal) {.base.} =
      echo "..."
    
    
    type
      Human = ref object of Animal
      Dog = ref object of Animal
    
    method makeNoise(this: Human) =
      echo "Hi, I'm ", this.name
    
    method makeNoise(this: Dog) =
      echo "*Bark!* [said ", this.name, "]"
    
    
    let
      h = Human(name: "Kevin Bacon")
      d = Dog(name: "Fuzzy")
    
    h.makeNoise()
    d.makeNoise()
    
    let a:Animal = Dog(name: "Fluffy")
    a.makeNoise()
    

Produces this result: 
    
    
    Hi, I'm Kevin Bacon
    *Bark!* [said Fuzzy]
    *Bark!* [said Fluffy]
    

But when we take away that ref keyword from the type lines, the output becomes 
this: 
    
    
    Hi, I'm Kevin Bacon
    *Bark!* [said Fuzzy]
    ...
    

This leads me to believe that my objects need to be reference counted to take 
advantage of dynamic dispatch. Is this true?

Reply via email to