#cpp #память #переменные
Два вопроса: Корректно ли создавать динамическую переменную со спецификатором static? static int *i = new int; - верно? Можно ли работать с дин.переменной после её удаления: int *i = new int; delete i; i = new int;
Ответы
Ответ 1
Да, корректно, почему нет? Да, можно. Причём во многих библиотеках примерно так делается. Вы удаляете не переменную i, а освобождаете память, на которую указывает указатель i, и после этого его можно заставить указывать на новую область памяти.Ответ 2
Давайте кое-что проясним. int *i это переменная типа указатель на int. Когда вы пишете delete i; вы не удаляете переменную, вы удаляете то, на что она указывает. Другими словами так делать можно: int *i = new int; delete i; i = new int; Потому что вы работаете с переменной типа указатель на int, которая цела и невредима. А так делать нельзя int *i = new int; delete i; *i = 42; Потому что вы работаете у переменной типа int, которая была удалена. Теперь, когда мы это прояснили, автоматически все стало понятно и с первым вопросом. Да, так делать можно. Вы создали статическую переменную типа указатель на инт, и инициализировали её указателем на переменную типа int, которая находится в динамической памяти
Комментариев нет:
Отправить комментарий