Message: Re: Using shared_ptr (from the boost library) Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

None Re: Using shared_ptr (from the boost library) 

Forum: Installation and Configuration
Re: None Using shared_ptr (from the boost library)
Re: Question Re: Using shared_ptr (from the boost library) (Gabriele Cosmo)
Re: None Re: Using shared_ptr (from the boost library) (Peter Niessen )
Re: More Re: Using shared_ptr (from the boost library) (Gabriele Cosmo)
Date: 21 Nov, 2007
From: Peter Niessen <niessen@ifh.de>

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--579714831-1121780015-1195672994=:23889
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: 8BIT

On Wed, 21 Nov 2007, Gabriele Cosmo wrote:

> *** Discussion title: Installation and Configuration
> Email replies to PublicHyperNews@slac.stanford.edu must include:
>   In-Reply-To: <"/installconfig/1017/1/1/1"@geant4-hn.slac.stanford.edu>
>   Subject: ...change this to be about your reply.
> 
> Hi Peter,
> 
> > In my application, I usually do a lot of "new", espescially in the
> > detector construction: New Elements, new Material Properties, new
> > volumes, etc.
> >
> > Then, before returning the physical world volume, I lose all these
> > pointers, as they go out of scope:
> 
> materials and geometrical volumes/solids are 'cached' and registered in stores internally
> in Geant4. These pointers are de-registered and deleted at the end of the application
> if not explicitly done by the user. If an exception occurs, no tiding up is done implicitly
> by the Geant4 kernel...

Hi Gabriele,

I just tried it in a small example and replaced all the 

G4Material *ne102a = new G4Material ("NE102A", 1.032 * g / cm3, 2);

etc. by 

boost::shared_ptr<G4Material> ne102a (new G4Material (...));

and pass them to the other methods like

boost::shared_ptr<G4LogicalVolume> scintillator_log
	(new G4LogicalVolume (scintillator_box.get (),
	ne102a.get (),
	"scintillatorLog"));

but of course, since I pass the pointer and not the shared_ptr in the
G4LogicalVolume constructor, boost doesn't increase the count and
deletes the stuff at the end of ::Construct () -> not good.

I guess I'll leave it as it is.

> 
> btw, you certainly don't want to delete the pointers within the construct() method... you
> may want to keep the pointers as members of the class, or implement a way to cache
> them if wish to reuse them elsewhere within the lifetime of your DetectorConstruction
> object.

Indeed!
> 
> Gabriele
> 

Peter Nießen (Peter Niessen for special character challenged displays)
Bartol Research Institute
University of Delaware
Newark, DE 19716-4793
U.S. of America

Tel (+1)302/831-8700
Fax (+1)302/831-1843
e-mail niessen@ifh.de
www http://www.ifh.de/~niessen

Aber icerec, der alte Knochen, war ja schon immer die H-Milch unter
den Metaprojekten, also koennte sim2.0+rec1.5.9 ne lange Ehe werden.

S. Klepser, August 2007
--579714831-1121780015-1195672994=:23889--

Inline Depth:
 1 1
 All All
Outline Depth:
 1 1
 2 2
 All All
Add message: (add)

 Add Message Add Message
to: "Re: Using shared_ptr (from the boost library)"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews


[ Geant 4 Home | Geant 4 HyperNews | Search | Request New Forum | Feedback ]