Здравствуйте, mgu, Вы писали:
mgu>Во-первых, крайне необычно сначала разблокировать, а затем блокировать [...]
Вставлю свои пять копеек.
В приведённых вами кусках кода я никаких явных проблем не вижу. А вот код AlexGin, и в самом деле, вызывает некоторые вопросы. Вот
тут, к примеру:
if (m_pSerial)
delete m_pSerial;
m_pSerial = new CSerial();
if (m_pSerial != NULL)
....
Сразу возникает две мысли. Во-первых, delete не обнуляет указатель. Впрочем, тут надо бы посмотреть на документацию к тому компилятору, который использовался в том проекте, но всяко надёжнее и безопаснее было бы добавить "m_pSerial = null". Ибо если какой-то компилятор обнуляет, то другой может не обнулять. Иначе рискуем вызвать delete для уже уничтоженного объекта.
А вот следующая строка напрямую вызывает вопросы о знании стандарта С++. Я помню, что какие-то древние версии компилятора возвращали null в случае проблем при аллокации памяти. Но современные компиляторы давно уже выбрасывают исключение, а не возвращают null. Можно явно запросить то старое поведение таким образом:
m_pSerial = new(nothrow) CSerial();
Может быть это особенности того конкретного проекта и компилятора, которым оно собирается, но вот сходу выглядит как незнание стандарта.
А вот
тут функция CNewSamsung::SendSmsMass на ~240 выглядит неимоверно раздутой.