C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Schwartz counters.

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
Dave Townsend
Guest





PostPosted: Sat Jun 26, 2004 10:25 pm    Post subject: Schwartz counters. Reply with quote



John,

Schwartz counters are a variation of the Singleton pattern to control the
lifetime
of a shared resource such as a file stream such that the resource is created
only
once on the first use, and destroyed when the last client of the resource is
destroyed.
A mgr class controls the shared resource and keeps track of how many times
the constructor
for the resource is called and how many times the destructor is called.
Here is an example to explain better than my words...

dave



#include <iostream>
#include <string>
using namespace std;

class SharedResource
{
public:
SharedResource()
{
cout << "Create shared resourcen";

}
~SharedResource()
{
cout << "Closing shared resource n";
}

void printmsg( const string& Message )
{
cout << "SharedResource::Msg " << Message << "n";
}

};


class SharedResourceMgr
{
public:
SharedResourceMgr()
{
if ( !_count)
{
_SharedResource = new SharedResource();
}
_count++;
}
~SharedResourceMgr()
{
_count--;

if (!_count )
{
delete _SharedResource;
}
}
SharedResource* getSharedResource(){ return _SharedResource;}

private:
static long _count;
static SharedResource* _SharedResource;


};

long SharedResourceMgr::_count =0;
SharedResource* SharedResourceMgr::_SharedResource = 0;


class C1
{
public:
SharedResourceMgr _foo;
void printmsg( const string& msg){
_foo.getSharedResource()->printmsg(msg);}

};
class C2
{
public:
SharedResourceMgr _foo;
void printmsg( const string& msg){
_foo.getSharedResource()->printmsg(msg); };
};
class C3
{
public:
SharedResourceMgr _foo;
void printmsg( const string& msg){
_foo.getSharedResource()->printmsg(msg); };
};

// static instances
C1 c1;
C1 c2;
C1 c3;

int main(int argc, char* argv[])
{
c1.printmsg("C1");
c2.printmsg("C2");
c3.printmsg("C3");


return 0;
}


Back to top
John Harrison
Guest





PostPosted: Sun Jun 27, 2004 7:34 am    Post subject: Re: Schwartz counters. Reply with quote




"Dave Townsend" <datownsend (AT) comcast (DOT) net> wrote

Quote:
John,

Schwartz counters are a variation of the Singleton pattern to control the
lifetime
of a shared resource such as a file stream such that the resource is
created
only
once on the first use, and destroyed when the last client of the resource
is
destroyed.
A mgr class controls the shared resource and keeps track of how many times
the constructor
for the resource is called and how many times the destructor is called.
Here is an example to explain better than my words...

dave


Thanks for the clear explanation. I was hoping for something a bit more
sophisticated though. The original quote made it sound like it might be
something for controlling the order of initialisation across translation
units.

John



Back to top
Alf P. Steinbach
Guest





PostPosted: Sun Jun 27, 2004 8:33 am    Post subject: Re: Schwartz counters. Reply with quote



* John Harrison:
Quote:

"Dave Townsend" <datownsend (AT) comcast (DOT) net> wrote in message
news:NMudnSZt5Zt_akDdRVn-gQ (AT) comcast (DOT) com...
John,

Schwartz counters are a variation of the Singleton pattern to control the
lifetime
of a shared resource such as a file stream such that the resource is
created
only
once on the first use, and destroyed when the last client of the resource
is
destroyed.
A mgr class controls the shared resource and keeps track of how many times
the constructor
for the resource is called and how many times the destructor is called.
Here is an example to explain better than my words...

dave


Thanks for the clear explanation. I was hoping for something a bit more
sophisticated though. The original quote made it sound like it might be
something for controlling the order of initialisation across translation
units.

It is related. I think Andrei covered that usage in Modern C++ Design.
One problem it can solve is that while static destruction is opposite
order of construction, one may want e.g. a logging facility to exist
as long as anyone is using it; it might be instantiated late on, but
used till the end of the program.

But I totally agree with you that using a special name for something
conceptually trivial like that (although its application is not
necessary so) is in my words a case of projecting an appearance of
sophistication when the reality is mundane, where that effort by itself
degrades the communication to the point where little can be understood.

Henceforth we shall not say "smart-pointer" but "indirection-operator
based generic implemention of Handle/Body pattern with automatic memory
reclamation semantics", or perhaps "Kalasabunka-Flirrp handles", after
the well-known (?) computer scientists Kalasabunka and Flirrp.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.