c++ - Does boost::optional trigger a ref count on shared_ptr? -
i'm trying function return optional value map. this:
boost::optional<v> findvalue(const k& key) { boost::optional<v> ret; auto = map.find(key); if (it != map.end()) { ret = it->second; } return ret; } if v happens shared_ptr type of kind, assignment ret trigger reference count?
yes, has to. boost::optional stores copy, shared_ptr, means there copy of shared_ptr , means reference count must increased.
note long boost::optional empty, i.e., doesn't contain value of shared_ptr, there no object reference count fiddled with. in other words, empty boost::optional not contain (empty or otherwise) shared_ptr.
the requested "semantics" can't work because keep 1 shared_ptr in map , return shared_ptr.
however, may return boost::optional<const v&>:
boost::optional<const v&> findvalue(const k& key) { auto = map.find(key); if (it != map.end()) { return boost::optional<const v&>( it->second ); } return boost::optional<const v&>(); } but make sure reference remains valid while keep/use it.
Comments
Post a Comment