Все зависит от того, что делает getStr()
.Может даже случиться так, что вам придется вызывать free
для указателя, если getStr()
создал его с помощью malloc
.Может случиться так, что getStr()
возвращает указатель на статическую область (не очень поточно-безопасную, но бывает) или любое другое.
Часть контракта и документация для getStr()
должны бытькто владеет указателем, тот возвращает.
Вот несколько примеров возможных getStr()
функций ...
В этом случае getStr()
владеет указателем, и вам не нужно ничего делатьчтобы освободить это.OTOH, то, на что указывают, может измениться в следующий раз, когда вы позвоните по номеру getStr()
, поэтому вам, вероятно, следует сделать свою собственную копию, если вам нужно хранить ее в течение какого-то промежутка времени:
const char *getStr()
{
static char buf[30] = "Silly counter";
buf[0] = buf[0] + 1;
return buf;
}
В этом случае,в конечном итоге вам нужно будет вызвать free
для возвращенного указателя:
const char *getStr()
{
return strdup("Silly string");
}
В этом случае вам нужно будет вызвать обычный старый delete
для возвращенного указателя:
const char *getStr()
{
return new char;
}
В этом случае вам нужно будет вызвать delete []
для возвращенного указателя:
const char *getStr()
{
return new char[50];
}
Есть много других возможностей.Как я уже говорил ранее, часть контракта для функции (которая должна появиться в ее документации) - это то, кто владеет возвращаемым указателем, и как эти данные должны быть удалены, если это является обязанностью вызывающей стороны.