#c #casting
#c #Кастинг
Вопрос:
void func::open()
{
RequestSession* psg = new RequestSession;
((RequestSession*)psg)->st.ProVer = PRO_VERSION; //PRO_VERSION is macro
((RequestSession*)psg)->st.DevID = DEVICE_ID; //DEVICE_ID is macro
}
Я не мог понять, зачем нужно приведение типов еще раз, поскольку psg является указателем класса RequestSession.
Комментарии:
1. Не уверен насчет точного случая, но он мог быть приведен к какому-либо другому типу, но это приведение сохранено для дальнейшего уточнения.
2. Кажется, это не очень проясняет ситуацию, не так ли?:-)
3. У вас также есть утечка памяти…
Ответ №1:
Приведение типов здесь не требуется. Это избыточно и устраняется.
Ответ №2:
Проще говоря, всякий раз, когда вы видите приведение в стиле C в коде C , это неправильно. В очень, очень редких случаях, когда требуется приведение, вам следует использовать static_cast
или даже реже reinterpret_cast
. Единственное приведение, которое вообще появляется в моем собственном коде, — это dynamic_cast
, которое необходимо, когда вам действительно нужно найти тип чего-либо, но это тоже довольно редко.