Выделение памяти внутри функции
{
........................................................
char* pszString = new char[iMaxLenReult];
........................................................
........................................................
return pszString;
}
она используется следующим образом
int iLenResult = fnGetLen(fnGetString());
........................................................
будет ли память выделенная в fnGetString() удалена, если да то где и как это произойдет, если нет то как этого избежать?
И еще корректен ли следующий код?
char* pszResult = fnGetString();
........................................................
delete [] pszResult;
да, будет. там где будет вызван метод delete.
он не скомпилируется без явного приведения к char*
char* pszResult = fnGetString();
........................................................
delete [] pszResult;
По всей видимости имелось ввиду не char * а const char *. Насколько я знаю, так можно делать - тогда обычно пишут соответствующий метод для удаления объекта:
delete [] pszString;
}
Тогда результирующий код будет выглядить так:
fnDestroyString(pszResult);
Или использовать констукторы/деструкторы.
igor_nf, а смысл написание отдельной функции для удаления памяти, ведь это лишние затраты на вызов?...
igor_nf, а смысл написание отдельной функции для удаления памяти, ведь это лишние затраты на вызов?...
Память, выделенная с помощью оператора new будет освобождена либо при явном вызове delete (независимо в каком месте программы) либо после завершения самого приложения.
Вот, теперь ясно. Спасибо!
ок, спасибо, учту!=)
igor_nf, а смысл написание отдельной функции для удаления памяти, ведь это лишние затраты на вызов?...
Дело не в лишних затратах, а в правильных интерфейсах, если создаёшь через в-ю, и удаляй через ф-ю, это логично, потом никто не найдёт где выделялась память.... Видел когда память выделяли в длл, а удаляли в приложении, а надо было всего лишь предоставаить вызов для удаления. Ну и кто потом определит где память была выделена и что мы вообще удаляем и вообще каким способом..а лишние затраты потом будут на отладку и исправления багов.
Тут еще можно поиметь баги с разным выравниванием памяти в dll и в исполняемом модуле, если они собраны в разное время с разными настройками или на разных компиляторах.