[ 
https://issues.apache.org/jira/browse/GEODE-3645?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16271266#comment-16271266
 ] 

ASF GitHub Bot commented on GEODE-3645:
---------------------------------------

pivotal-jbarrett commented on a change in pull request #159: GEODE-3645: Update 
CacheFactory::create to return Cache by value
URL: https://github.com/apache/geode-native/pull/159#discussion_r153866388
 
 

 ##########
 File path: cppcache/integration-test/CacheHelper.cpp
 ##########
 @@ -127,7 +129,8 @@ CacheHelper::CacheHelper(const 
std::shared_ptr<Properties>& configPtr,
     pp = Properties::create();
   }
 
-  cachePtr = CacheFactory::createCacheFactory(pp)->create();
+  auto cacheFactory = CacheFactory::createCacheFactory(pp);
+  cachePtr.reset(new Cache(cacheFactory->create()));
 
 Review comment:
   I think I prefer:
   ```
   cachePtr = std::make_shared<Cache>(cacheFactory->create());
   ```
   It results in a single allocation of the `Cache` and control blocks for the 
shared pinter and they get moved into the existing shared_ptr. Calling reset 
results in two allocation, one for the Cache and another for the new control 
block.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Update API CacheFactory::create to return cache object
> ------------------------------------------------------
>
>                 Key: GEODE-3645
>                 URL: https://issues.apache.org/jira/browse/GEODE-3645
>             Project: Geode
>          Issue Type: New Feature
>          Components: native client
>            Reporter: David Kimura
>
> As an application developer I want to control the stack vs heap allocation of 
> my cache object.  If we change CacheFactory::create to return a cache object 
> then the application user can pick an allocation scheme.  This also allows 
> application developers to bypass smart pointer complexity until the developer 
> deems them necessary.
> Example:
> {noformat}
> auto cache = CacheFactory::createFactory().create();
> auto cacheptr = 
> std::make_shared<Cache>(CacheFactory::createFactory().create());
> {noformat}
> Difficulty of implementation is due to Cache/CacheImpl circular dependency.  
> Here are a few examples of various approaches to consider:
> https://gist.github.com/pivotal-jbarrett/52ba9ec5de0b494368d1c5282ef188ef
> https://gist.github.com/pivotal-jbarrett/c48ffff3f7f41b187f0ed8c80108aa6a
> Here are the related email threads of interest:
> http://markmail.org/message/in5e337npq5euslh
> http://markmail.org/message/lp2rx2rtyblg72fv



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to