Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #11919
| From | Ian Collins <ian-news@hotmail.com> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: Is this bad? (How can this be avoided?) |
| Date | 2011-11-29 13:04 +1300 |
| Message-ID | <9jilrvF4d0U26@mid.individual.net> (permalink) |
| References | <52997172-c9ca-4e1b-aad0-98fc277268a8@g1g2000pri.googlegroups.com> <iP-dnQr9WMmhlUnTnZ2dnUVZ8qmdnZ2d@giganews.com> <d93699f8-e11f-4685-8e72-5053a29e71f4@h37g2000pri.googlegroups.com> |
On 11/29/11 12:16 PM, mike3 wrote: > On Nov 28, 3:16 pm, Leigh Johnston<le...@i42.co.uk> wrote: >> On 28/11/2011 21:44, mike3 wrote: >> >><snip code> >> >>> What to do? Now one could, I suppose, change to Circle* circle = new >>> Circle(35.0, 55.0, 25.0);, but then we need something to take care of >>> the garbage. Adding a delete() in, say, the destructor for Drawing >>> might work, but we make some assumptions that may or may not be true, >>> i.e. one can break it by misusing it, e.g. if one does not use a new >>> to get the parameter or one forgets that destroying drawing also >>> destroys circle, etc. Is it a bad idea to rely on the user's >>> understanding -- to me it doesn't seem so. What should be done? >> >> Easy: use std::vector<std::tr1::shared_ptr<Shape> > (pre C++11) or >> std::vector<std::unique_ptr<Shape> > (C++11) instead or take a look at >> the Boost "ptr" containers. > > And should the function addShape() be upgraded to use shared_ptr? > > And also, though this solves the "garbage collection" issue, it still > seems > the user needs to understand that they must pass an object that's on > the heap, > and that it will be lost when the Drawing object is gone. Is that OK? Most drawing libraries I've used work this way, the container "owns" the drawable objects. The simplest solution is to have the Drawing destructor free all of the Shape objects it owns. So they all assume the drawable objects are on the heap. If you want something more complex, such as the same shape in more than one drawing, then something like a shared_ptr is the solution. -- Ian Collins
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Is this bad? (How can this be avoided?) mike3 <mike4ty4@yahoo.com> - 2011-11-28 13:44 -0800
Re: Is this bad? (How can this be avoided?) Leigh Johnston <leigh@i42.co.uk> - 2011-11-28 22:16 +0000
Re: Is this bad? (How can this be avoided?) mike3 <mike4ty4@yahoo.com> - 2011-11-28 15:16 -0800
Re: Is this bad? (How can this be avoided?) Ian Collins <ian-news@hotmail.com> - 2011-11-29 13:04 +1300
Re: Is this bad? (How can this be avoided?) mike3 <mike4ty4@yahoo.com> - 2011-11-28 17:17 -0800
Re: Is this bad? (How can this be avoided?) Ian Collins <ian-news@hotmail.com> - 2011-11-29 14:28 +1300
Re: Is this bad? (How can this be avoided?) "MikeWhy" <boat042-nospam@yahoo.com> - 2011-11-28 19:17 -0600
Re: Is this bad? (How can this be avoided?) Leigh Johnston <leigh@i42.co.uk> - 2011-11-29 14:12 +0000
Re: Is this bad? (How can this be avoided?) Goran <goran.pusic@gmail.com> - 2011-11-29 00:06 -0800
Re: Is this bad? (How can this be avoided?) jgk@panix.com (Joe keane) - 2011-11-30 17:43 +0000
Re: Is this bad? (How can this be avoided?) "MikeWhy" <boat042-nospam@yahoo.com> - 2011-11-30 12:26 -0600
Re: Is this bad? (How can this be avoided?) jgk@panix.com (Joe keane) - 2011-11-30 20:36 +0000
Re: Is this bad? (How can this be avoided?) Leigh Johnston <leigh@i42.co.uk> - 2011-11-30 18:26 +0000
csiph-web