Это два разных класса, которые были разработаны разными разработчиками.
Класс std::string - это прежде всего стандартный клас, который сочетается с компонентами STL. А следовательно имеет смысл в проекте в качестве строкового класса использовать std::string в случае, если в проекте предполагается широкое применение STL, а также в том случае, если проект обещает быть кросплатформенным или будет в дальнейшем портироваться на прочие (не Windows) платформы.
Класс CString - это строковый класс, разработанный компанией Microsoft. Данный класс очень хорошо сочетается с другими классами MFC и имеет очень богатый набор методов для обработки и преобразования строк (можно ознакомиться в MSDN). В ряде случаев CString по скорости обработки превосходит std::string. Работать с CString имеет смысл тогда, когда проект разрабатывается только для работы из под среды Windows. По личному опыту хочется отметить, что с CString удобнее работать с точки зрения преобразования типов.