c++ - To get reference counting, do I have to clutter my APIs with shared_ptr? -
I recently had the following memory bug , which is easy to monitor here, but It can be difficult to find out more complex code:
  square fu: public IFoo {const bar & amp; Bar_; Public: Foo (Constant Bar and Bar): Bar_ (bar) {} zero test () {// login bar_ here}}; Int Baz () {IFoo * foo = NULL; If (whatever) {repeatedly; Foo = new foo (bar); } Other {// create another foo} foo- & gt; exam (); // block fault)    The bug is that  times  goes out of the area immediately, is destroyed and then  foo-> test () Is used in . One solution is to create  bar  on a heap, using  bar * time = new bar () . However, I do not like to do this because I have to keep the  bar * bar  pointer at the top level so that I can access it and  delete  this though at the end,  The bar is such a code that is specific to that particular code block  (if) {} . 
 Another solution is  boost:: shared_ptr 
  if (if any) {boost :: shared_ptr & lt; Bar & gt; Bar (new bar ()); Foo = new foo (* times); }    Because  shared_ptr  exits the scope, in addition, destroys the underlying object. 
 In short, to get rid of this problem, in the member << code> Foo   to  shared_ptr  everywhere ,  Foo  to use constructor etc. To eliminate these problems in general, all my APIs etc. It has to use  shared_ptr , which is ugly but, is this the right thing to do? So far, I have used it to create context-calculated objects, but I have kept my API clean from  shared_ptr . How do you deal with this problem, once you use  shared_ptr  you have to use it  everywhere ? 
 (In addition, if you use these reference-count indications, then you have to start worrying about it if you actually have to  shared_ptr  or  weak_ptr  etc.). 
 And, what will I use as the  Foo (Constant Bar and Bar) ?  Foo (Constant SharePTR & lt; Constellate Bar>) ? 
 Another option, of course, is to use  pimpl  to add context coding inside  bar  and other objects and use their own counters. , But it is also very tedious as the general rule becomes. 
 Actually I  do   shared_ptr  everywhere ... There are several ways to look at it a little less hassle. For each defined class I use a conference: 
makes the code more readable :)
For your specific problem, remember that you can pass the bar by the pointer - remember to allocate you Though on the heap however
Comments
Post a Comment