
Dave Handley wrote:
Great work - I've been away from the list for a couple of days so sorry I didn't get back sooner, but I think you have definitely gone the right way with what you've done up to now.
Thanks :)
My recommendations for things to look at include:
1) Allocate using malloc as another creation policy 2) Longevity lifetimes
I'm actually working on the longevity policy now. I'm trying to do it without using atexit, and instead using a hidden internal singleton that manages the lifetimes of the others. It should be interesting.
3) Possibly include the ability to turn off phoenix singletons in the dependency lifetime policy.
This leads to an interesting question: what should happen if a class tries to get access to a destroyed singleton? I would personally think that it would always be desirable to have it come back, but then this is just my opinion and probably falls into the same category as me preferring dependencies to longevities. Which leads me to wonder if OnDeadReference should be an additional policy of the lifetime policy itself.
4) Threading.
I'm going to need help with this one. My current thought is to provide a lock policy. The lock would be required to provide locking upon creation and unlocking upon destruction, and then all the other policies of the singleton would inherit this policy and could simply insert lock objects wherever they are needed. The default single threaded lock would just be an empty class. Unfortunately I have no experience with how threading actually works, and I am worried that the two threads would just end up creating two different locks and neither would block the other. If I am not on the right track, please point me in the right direction. -Jason