Как я знаю, что это нормально, чтобы освободить указатель после передачи его в функцию? - PullRequest
0 голосов
/ 23 ноября 2018

Например, https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#gdk-window-begin-draw-frame, принимает указатель на регион в качестве параметра.Так откуда я знаю, что он не хранит его где-то, чтобы использовать позже?Или я могу освободить указатель сразу после вызова функции?Есть ли какая-то общая рутина в GTK?

Спасибо.

1 Ответ

0 голосов
/ 23 ноября 2018

Как правило, эту проблему можно решить с помощью понятия «владение» указателем соответственно.соответствующая область памяти.

По сути, функция должна определить, вступает ли она во владение областью (в этом случае вы передаете ее этой функции и не должны заботиться об этом, но OTOH вам обязательнодолжен распределять его так, чтобы функция работала нормально, или если он просто «заимствует» указатель.В этом случае он остается вашим, и функция только временно использует его.

Третий вариант - смешанный случай: функция занимает владение, но требует, чтобы память оставалась выделенной (то есть используемой) до тех пор, покапроисходит определенное действие (например, освобождение данного ресурса).В этом случае вы сами выбираете, где выбрать память (куча, стек, статическая память и т. Д.), Но вы несете ответственность за то, чтобы ее можно было использовать достаточно долго.

Что должна делать функция, должно быть задокументированогде-то.

...