A simple RAII wrapper for Core Foundation objects.
Note
C++17 is required.
Add a package dependency to https://github.com/sbooth/CXXCFRef in Xcode.
- Clone the CXXCFRef repository.
swift build.
If you prefer a minimalist std::unique_ptr-based approach:
struct cf_deleter {
void operator()(CFTypeRef cf CF_RELEASES_ARGUMENT) noexcept { CFRelease(cf); }
};
template <typename T>
using cf_ptr = std::unique_ptr<std::remove_pointer_t<T>, cf_deleter>;Or a C-based approach:
static void CleanupCFString(CFStringRef *cf_ptr) { if(*cf_ptr) CFRelease(*cf_ptr); }
__attribute__((cleanup(CleanupCFString))) CFStringRef str = /* ... */Released under the MIT License.