Я немного устал от C ++, поэтому я ищу помощь с вопросом о указателе строки.
Во-первых, давайте рассмотрим некоторые основы указателя с целым числом:
void SetBob(int* pBob)
{
*pBob = 5;
}
int main(int argc, _TCHAR* argv[])
{
int bob = 0;
SetBob(&bob);
}
При запуске main () создает целое число и передает его адрес SetBob. В SetBob значение (по адресу, на который указывает pBob) установлено на 5. Когда SetBob возвращается, bob имеет значение 5.
Теперь давайте рассмотрим строковую константу:
typedef wchar_t WCHAR;
typedef const WCHAR *PCWSTR;
void SetBob(PCWSTR* bob)
{
*bob = L"Done";
}
int main(int argc, _TCHAR* argv[])
{
PCWSTR bob = L"";
SetBob(&bob);
}
При запуске main () создает PCWSTR, указывающий на пустую строку, и передает его адрес SetBob. В SetBob указатель PCWSTR теперь указывает на строку Done. Когда SetBob возвращается, bob имеет значение «Done».
Мои вопросы:
Для вопроса 1 вы просто даете себе правильный ответ.
А для вопроса 2 это похоже на вопрос 1. Вы видите, что в SetBob программа выделяет (вы можете считать это точно так же, как «malloc») пространство для строки «Done», затем устанавливаете указатель bob на адрес строка. Таким образом, на этом этапе память, принадлежащая строке, помечается как «используемая», поэтому даже когда дело доходит до конца функции, она никогда не будет уничтожена. Только когда вы используете «бесплатно», это всегда будет в вашей памяти.
Других решений пока нет …