Modern apps should use ARC for Objective-C memory management.
Very generally, your C++ memory management will have to rely on:
local stack-based object creation and deletion, which will work fine in the scope of a method as long as there are no Obj-C exceptions thrown.
allocated C++ objects with new/delete explicitly called.
wrappers and containers that use 1 or 2.
For example, an NSValue can contain a pointer that is a C++ object created with new(), but the NSValue will not automatically delete it, so if it's a member of an Objective-C class you need to override dealloc()
(when ARC frees the object) and delete the underlying C++ pointer wrapped in your NSValue object.
OTOH C++ safe-pointer wrappers declared on the stack will work as expected when they go out of scope.
Exception handling is important to understand, so search for information about Objective-C exceptions vs. C++ exceptions both here and in other tutorials and documentation. In general, try to avoid using exceptions for program flow when mixing ARC and C++ code.
This aspect of the question may mostly be answered here: Objective-C Exceptions
Also here's a thread about NSValue valueWithPointer:
Does NSValue free its value when freed?