Я новичок в C ++, и в настоящее время я работаю над некоторым проектом и хочу использовать C ++ вместо C.
Первая проблема, с которой я столкнулся, заключается в том, что, например, в OpenSSL есть функции, которые принимают char*
в качестве аргументов.
В C ++ не рекомендуется использовать char*
. Я читал, что некоторые люди рекомендуют std::string
или std::vector<char>
.
Но, например, BIO_read
(которая записывает данные в char*
), функция в OpenSSL принимает char*
. std::string
имеет функцию c_str()
, но возвращает const char*
. Я знаю, что могу разыграть const
, используя const_cast
, но это не очень хорошая идея, потому что это не тот способ, которым нужно менять строку.
Что такое «C ++ решение» этой проблемы? Я хочу использовать принципы RAII и OOP. Единственное решение, которое я мог придумать, - это создать класс, который бы принимал размер памяти в качестве аргумента в конструкторе и имел что-то вроде char* _buf = new char[size]
и освобождал память в деструкторе. Это лучшее решение в этой ситуации?
Или куда мне поместить данные, полученные из сокета, используя recv
, когда я не знаю их размер? В C я бы выделил память, используя malloc
, и записал ее там. Но как я могу сделать это в стиле C ++? Создайте класс, который я упомянул выше, и используйте его вместо malloc
?