こういうことでしょうか?

hoge = 0 ;          #変数hogeは、Fixnumのあるインスタンスへの参照
hoge = "hello,world" ;   #変数hogeは、Stringのインスタンスへの参照
                #Fixnumのあるインスタンスは参照されなくなり、いずれGCによって回収される。

hoge = 1 ;          #変数hogeは、Fixnumのインスタンスへの参照
hoge *= 2 ;          #変数hogeは、一行上のインスタンスを2倍した、新しいインスタンスへの参照
                 #値が1の、Fixnumインスタンスは参照されなくなり、いずれGCによって回収される。

むりやりC++で書くとこうなのかな。

void *hoge ;
hoge = reinterpret_cast<void*>( new Fixnum(0) ) ;
hoge = reinterpret_cast<void*>( new String("hello,world") ) ;
hoge = reinterpret_cast<void*>( new Fixnum(1) ) ;
hoge = reinterpret_cast<void*>( new Fixnum( *((Fixnum *)hoge) * 2 ) ) ;