refactory
decl destructor