On 27/06/2019 13:52, Bagaskoro Kang wrote:
the creator apis have two out params: Interface** pointer and unsigned* size and the destroyer functions must be called with pointer and the size.
Interface** obj; unsigned size; int ret = Create(... ... ... &obj, &size);
and then we need to call a Release(obj, size) if the ret is success.
I do not think I can use the out_ptr with these APIs ???
I assume that's a typo and should be "Interface* obj". You wouldn't be able to use it out of the box with that interface, but if you define a custom smart pointer (which just wraps std::unique_ptr with a deleter that passes the size, for example) then you could probably get it to work. Spreading the responsibilities over two parameters does make things more tricky, though. If it's at all possible to remove the requirement to pass size around, you should do that instead. (It's not normally needed for array allocation, for example.)
also we call the Linux kernel C API posix_memalign() and we assign to unique_ptr. is not possible to use out_ptr with ?
std::unique_ptr
upNumf; void * pNumf; int ret = posix_memalign(&pNumf, 64, nNumf); if (!ret) upNumf.reset((Numf*)pNumf);
Why not use std::aligned_storage or put alignas on the class instead?