Если я использую std :: function для захвата лямбды, стоит ли беспокоиться об ее освобождении? - PullRequest
0 голосов
/ 22 января 2019

Рассмотрим следующий код:

std::function<void(void)> f = []() {};
std::function<void(void)>* fp = new std::function<void(void)>(f);

Всякий раз, когда программа покидает контекст этих строк (скажем, они были вызваны внутри функции, а функция возвращает) f и fp памятьможет быть исправлено в какой-то момент.Это нормально, потому что меня интересует только fp, и я получил его копию.

Суть в том, что у меня есть указатель на функцию (fp), которую я могу вызывать позже, когда захочу.Итак, до тех пор, пока я не delete fp, возникает вопрос:

Будет ли когда-либо освобожден f, что сделает fp недействительным?

1 Ответ

0 голосов
/ 22 января 2019

утверждение:

std::function<void(void)>* fp = new std::function<void(void)>(f);

вызывает конструктор копирования function(std::function<void ()> const&), а f сохраняется в памяти, на которую указывает fp.

Таким образом, fp не станет недействительным, если не будет удален.

Как указано в комментариях, она такая же, как и любая другая локальная переменная, которая используется при инициализации другой переменной, память которой выделяется с помощью new. Срок действия локальной переменной не влияет на последующее использование переменной-указателя, если сам указатель не удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...