Follow up of attached discussion after more investigation. I created an
example of returning Cache as shared pointer versus raw value:
https://github.com/dgkimura/geode-native-sandbox
I still like returning by value as it lets the user do what they want with
their object.
// Here user creates object on their stack.
auto c = CacheFactory::createFactory().create();
// Here user creates smart pointer in their heap.
auto cptr =
std::make_shared<Cache>(CacheFactory::createFactory().create());
Difficulty of implementing this is high due to circular dependencies of
Cache/CacheImpl as well as objects hanging off CacheImpl that return
Cache. We must be extra careful when dealing with move/copy semantics of
Cache/CacheImpl.
Alternative, is to keep as is and only permit heap allocations from factory
using shared pointers.
Thanks,
David