Назначение этого атрибута предназначено (но не исключительно) для указателей на динамически распределяемые данные.
Это дает гарантию времени компиляции, что вызывающий код будет хранить указатель впеременная (может быть как параметр функции тоже, но в этом я не уверен) en тем самым делегирует ответственность за освобождение \ освобождение \ удаление объекта, на который она указывает.
Это для предотвращения утечки памяти и \ или других аспектов управления временем жизни.
Например, если вы вызываете malloc (...) без сохранения указателя, вы не можете освободитьэто потом.(malloc должен иметь этот атрибут)
Если вы используете его в функции, возвращающей объект, то этот механизм не имеет смысла, поскольку возвращаемый объект сохраняется во временной и может быть скопирован во временную переменную (может быть оптимизировано) и всегда будет уничтожено (потому что это будет.
Кстати, это не особенно полезно для возвращаемых ссылок (если вы не знаете об этом код и требует какой-то release механизм), так как указанный объект не разрушается при выходе из области видимости.