2017-02-14 19 views
0

Я программист на Java, я новичок в C++, и недавно я пишу код на C++. Я немного запутался в жизни объекта C++. (В Java есть GC, и мне не нужно беспокоиться об этой проблеме)время жизни объекта C++, определенного внутри функции

Вот мой вопрос. Предположим, у меня есть функция()

char *f() { 

    string a = "Hello"; 

    return a.c_str(); 

} 

Будет ли этот код быть действительно, моя путаница, что время жизни натянуть объявленной внутри F, будет GC-эд когда е возвращение? Могу ли я полагаться на возвращаемое значение a.c_str(), чтобы быть правильным вне f?

+0

В C++ нет сборки мусора. –

+0

* Могу ли я полагаться на возвращаемое значение a.c_str(), чтобы быть правильным вне f? * № –

+0

Нет необходимости использовать C-style 'char *'. Ваша проблема полностью исчезает, если вы просто возвращаете 'std :: string', который правильно управляет ее содержимым. Если вам нужно передать символ 'char *', используйте' c_str' как можно ближе к нему. И, кстати, 'c_str' дает вам' const char * ', поэтому попытка игнорировать его constness не работает. – chris

ответ

-1

C++ не содержит граббер, как java. Если вы создаете объект, вам нужно уничтожить его самостоятельно. Все переменные, определенные в функции, будут уничтожены при выходе из этой функции (кроме объектов, которые вам нужно уничтожить сами)

+0

* «кроме объектов, которые вам нужно уничтожить самостоятельно» * Это не имеет смысла и не прав. –

+0

Почему? объект * o = новый объект(); следует ли забыть об этом объекте? – user3811082

+0

'int i;' Теперь 'i' тоже объект. Ваша терминология полностью отключена. –