Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Good design?

Reply
Thread Tools

Good design?

 
 
Pelle Beckman
Guest
Posts: n/a
 
      04-20-2005
Hi,

I've just finished writing a template (whew!) and
would like some opinions on the design.

The goal was to be able to do fairly simple
singletons (no excplicit thread-safety, etc)
and keep it simple.
It's also supposted to give the ability to
do simple derived singletons - which is not
possible with my other attempts that were based
on the classical "global pointer to an object
which is set using 'this' in the objects constructor"
(I hope you understood that...).

Anyway, comments? suggestions?
I'm a bit unsure of the ()-operator - could
that get in the way of other functions, operators, etc?

template<class T>
class Singleton {
public:
T* Instance ();
void Release ();
T* operator() ();

Singleton () {}

private:
static T* m_singleton;
};

template<class T> T* Singleton<T>::m_singleton = 0;

template<class T>
T* Singleton<T>:perator() () {
return this->Instance ();
}

template<class T>
T* Singleton<T>::Instance () {
if (m_singleton == 0) {
m_singleton = new T;
}
return m_singleton;
}

template<class T>
void Singleton<T>::Release () {
if (m_singleton == 0)
return;
delete m_singleton;
m_singleton = 0;
}

The code allows me to do this:

Singleton<MyClass> mysingleton;
mysingleton ()-> AFunction();
mysingleton.Instance ()->AFunction();

which I find is rather nice.

-- Pelle
 
Reply With Quote
 
 
 
 
Phlip
Guest
Posts: n/a
 
      04-20-2005
Pelle Beckman wrote:

> I've just finished writing a template (whew!) and
> would like some opinions on the design.


> Anyway, comments? suggestions?


Where are the unit tests?

--
Phlip
http://www.c2.com/cgi/wiki?ZeekLand


 
Reply With Quote
 
 
 
 
Pelle Beckman
Guest
Posts: n/a
 
      04-20-2005
Phlip skrev:
> Pelle Beckman wrote:
>
>
>>I've just finished writing a template (whew!) and
>>would like some opinions on the design.

>
>
>>Anyway, comments? suggestions?

>
>
> Where are the unit tests?
>


I'll guess you'll laugh you head off...

I don't know.
What's a unit test?

-- Pelle
 
Reply With Quote
 
Victor Bazarov
Guest
Posts: n/a
 
      04-20-2005
Pelle Beckman wrote:
> I've just finished writing a template (whew!) and
> would like some opinions on the design.
> [...]


Two things are missing: parameterized construction of the instance
or construction of the instance by a factory. I'd probably try to
have a special construction policy, and by default it would just
invoke the default c-tor.

V
 
Reply With Quote
 
Howard
Guest
Posts: n/a
 
      04-20-2005

"Phlip" <(E-Mail Removed)> wrote in message
news:e7w9e.1449$(E-Mail Removed) ...
> Pelle Beckman wrote:
>
>> I've just finished writing a template (whew!) and
>> would like some opinions on the design.

>
>> Anyway, comments? suggestions?

>
> Where are the unit tests?
>


I have them, and I'm not letting you look at them unless you say "please".


I think he was looking for suggestions on the *design*, actually. (There
isn't even a "main" there, so talking about unit tests is going a wee bit
beyond the question, I think.)

-Howard


 
Reply With Quote
 
Pelle Beckman
Guest
Posts: n/a
 
      04-20-2005
Victor Bazarov skrev:
> Pelle Beckman wrote:
>
>> I've just finished writing a template (whew!) and
>> would like some opinions on the design.
>> [...]

>
>
> Two things are missing: parameterized construction of the instance
> or construction of the instance by a factory. I'd probably try to
> have a special construction policy, and by default it would just
> invoke the default c-tor.
>
> V


Good point.
How you I go about implementing c-tor parameter passing?
Hints, solutions, hyperlinks?

-- Pelle
 
Reply With Quote
 
Phlip
Guest
Posts: n/a
 
      04-20-2005
Pelle Beckman wrote:

> > Where are the unit tests?

>
> I'll guess you'll laugh you head off...
>
> I don't know.
> What's a unit test?


Google for it.

Contrary to Howard's laugh, tests are a design thing. In the big C++ shops,
a request for a code review shall be accompanied by tests.

Here's one for your thing (with made-up code):

struct Foo{};

TEST_(TestCase, singular)
{
Singleton<Foo> mysingleton;
Singleton<Foo> yoursingleton;
Foo * p1 = mysingleton ();
Foo * p2 = yoursingleton.Instance ();
CHECK_EQUAL(p1, p2);
}

That test shows the Foo really is singular; the system did not allocate two
of them, at different addresses.

One runs all tests after every few edits. If a test fails, you have the
option to either hit Undo until they all pass, or you can debug. Without
tests, you don't know as soon as possible when you broke something, and you
can't use Undo. The only choice is to debug.

Now about style, if your system either throws an exception if new Foo fails,
then your operators can never return NULL. So maybe your system should
return a reference. Always use references without a reason to use pointers.

--
Phlip
http://www.c2.com/cgi/wiki?ZeekLand


 
Reply With Quote
 
Victor Bazarov
Guest
Posts: n/a
 
      04-20-2005
Pelle Beckman wrote:
> Victor Bazarov skrev:
>
>> Pelle Beckman wrote:
>>
>>> I've just finished writing a template (whew!) and
>>> would like some opinions on the design.
>>> [...]

>>
>>
>>
>> Two things are missing: parameterized construction of the instance
>> or construction of the instance by a factory. I'd probably try to
>> have a special construction policy, and by default it would just
>> invoke the default c-tor.
>>
>> V

>
>
> Good point.
> How you I go about implementing c-tor parameter passing?
> Hints, solutions, hyperlinks?


Andrei Alexandrescu, "Modern C++ Design", chapter 6, "Implementing
Singletons".

V
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
good algorithms come with practice and reading good code/books? vlsidesign C Programming 26 01-02-2007 09:50 AM
Good slide scanning service vs. good slide scanner for Do-It-Yourself? LAshooter Digital Photography 0 06-25-2005 07:14 AM
Signs are good, but WAN no good =?Utf-8?B?bmV0bnV0?= Wireless Networking 2 08-21-2004 12:41 PM
JLO situation+ why fastglass is good+DSLR is good Hugo Drax Digital Photography 0 01-17-2004 11:41 PM
Not even a newbee. Good at school course. please advise good start sikka noel C++ 8 08-05-2003 06:43 AM



Advertisments