magog 25.03.2012 11:43 Azoth

Вообще есть и прикольные моменты. Например все функции, которые имеют в своем имени Get и возвращают не примитивный тип, то возвращают аналог const T&, а все, которые Copy или Create — новые объекты, которые потом нужно удалить. Например:
CFArrayRef interfaces = SCNetworkInterfacesCopyAll ();
SCNetworkInterfaceRef pppInterface = NULL;
for (CFIndex i = 0, size = CFArrayGetCount (interfaces); i < size; ++i)
{
pppInterface = static_cast<SCNetworkInterfaceRef> (CFArrayGetValueAtIndex (interfaces, i));
,,,
}

Так вот если в конце сделать CFRelease (interfaces); то мы получим невалидный pppInterface. И для того, что бы освободить память занимаемую массивом interfaces необходимо для pppInterface изметь родителя, используя метод CFRetain (CFTypeRef cf);
Тоесть получается что-то такое:
...
pppInterface = static_cast<SCNetworkInterfaceRef> (CFArrayGetValueAtIndex (interfaces, i));
if (condition)
CFRetain (pppInterface);

Правыда, опять же, не очень понятно, как потом его удалить, если он у тебя не в глобальной области видимости или не является членом класса. Но в общем плане прикольно, имхо

Do you really want to delete ?