use array instead of tuple
avoid dynamic_pointer_cast
delete an unused function: get_obj
use more virtual function instead of members
fix initialize bug
avoid useless data member in class Trace