If your data contains pointers, then for it to be round-tripped through persistence correctly, i would imagine you'd need to map it at the same virtual memory address every time. Which isn't possible. Have i got that wrong?
[0] - https://www.boost.org/doc/libs/1_63_0/doc/html/interprocess/...
[1] - http://pmem.io/pmdk/cpp_obj/master/cpp_html/classpmem_1_1obj...
The actual hard part of persistent heaps isn't the persistence part. It's transactionality and upgrade management.