oop - Implementing deep clone() -


consider oop language (doesn't matter 1 it) , suppose language creator add deep clone() method every class. also, given heap implemented tree.

how should language creator implement it?

so can (automatically, @ compilation time) implement clone() method , adding proper functions virtual table. malloc() proper size known in run-time , copy source destination. finally, return pointer malloced memory.

if field pointer object, shall activate it's clone() , put result value @ field.

what problem arise if heap not "tree-based"?
don't know answer is. mean, why relevant how heap implemented? i'd glad here.

thanks.

the algorithm describe works fine object structure acyclic, i.e. forms tree. indeed, it's ok make shallow clone of object , proceed updating fields refer other objects using same technique.

however, if there cycles (i.e. object structure not form tree), algorithm run forever. in simplest case initial object o references itself: o -> o. when shallow clone c1 created, new object still references old one: c1 -> o. also, old object unchanged, i.e. have c1 -> o -> o. according algorithm clone of object referenced clone should created. because new object, different c1. so, picture becomes c1 -> c2 -> o. wrong, because deep clone should create c1 -> c1. bad news c2 subject processing. so, c1 -> c2 -> c3 -> o, etc. algorithm loop forever (until there no more memory create new objects).

to make algorithm working, should track old objects have been processed , new objects have been created them. instead of blindly making new clones of referenced objects should check whether old object has been cloned and, if yes, use clone rather create new one.


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -