added util::make_unique
construct children with make_unique instead of naked new