Хранилище, используемое для указателей, переданных в качестве аргументов, будет очищено.Но память, на которую они указывают, не будет очищена.
Так, например:
void foo(int *p) // p is a copy here
{
return;
// The memory used to hold p is cleared up,
// but not the memory used to hold *p
}
int main()
{
int *p = new int;
foo(p); // A copy of p is passed to the function (but not a copy of *p)
}
Вы часто будете слышать, как люди говорят о «в куче» и «в стеке»". * Локальные переменные (например, аргументы) хранятся в стеке, который автоматически очищается.Данные, выделенные с помощью new
(или malloc
), хранятся в куче, которая не очищается автоматически.
* Однако стандарт C ++ не говорит о «стеке»"и" куча "(это на самом деле детали реализации).Используются термины «автоматическое хранение» и «выделенное хранилище» соответственно.