add try count
use implicit allocator as default

replace raw pointer with details::scoped_ptr