Вам не нужен деструктор (ни конструктор копирования, ни перегруженный оператор присваивания). В этом весь смысл использования класса, подобного string, который делает все за вас, а не использования строк в стиле C и ручного управления памятью.
Компилятор производит все вышеупомянутое для вас, и по умолчанию деструктор просто вызывает деструкторы всех членов (это происходит неявно даже после завершения пользовательского деструктора). Деструктор String вступает во владение оттуда.