smart pointer takes care of deletion
add typedef