no need for empty destructor