Hi,

    Some base classes (specifically thread base classes) would benefit from 
being able to execute a function after the object is constructed and before 
it is destructed. For a thread class the thread can't start until after the 
object is constructed and must stop before the object is destructed.

    Does such a (probably non-standard) feature already exist or am I missing 
something.

   My idea was something like :-

#pragma hooks
class thread
{
    private:
    static void start_hook(thread*);
    static void stop_hook(thread*);
};

a) There can be only one class in any class hierarchy with the 'hooks' 
property.

// The following class definition is illegal
#pragma hooks
class my_thread : public thread
{
};

This removes any ordering issues for multiple hooks since there can only be 
one set of hooks. All though the base class could implement a mechanism for 
derived classes to have hooks. But this is an application issue.

b) Any object with a 'hooks' class in its class hierarchy has '<hooks 
class>::start_hook(ptr);' inserted after its constructor is complete (stack 
or new) and '<hooks class>::stop_hook(ptr)' before its destructor (stack or 
delete). For example :

class runit : public thread
{
};

void fred()
{
    runit a;
    //thread::start_hook(&a);  <== Inserted by compiler
    runit *b = new runit;
    //thread::start_hook(b); <== Inserted by compiler
    runit c[2];
    //thread::start_hook(c+0); <== Inserted by compiler
    //thread::start_hook(c+1); <== Inserted by compiler


    // Do the work


    //if (NULL != b) thread::stop_hook(b); <== Inserted by compiler
    delete b;

    //thread::stop_hook(c+0); <== Inserted by compiler
    //thread::stop_hook(c+1); <== Inserted by compiler
    // Implicit destruction of c

    //thread::stop_hook(&a); <== Inserted by compiler
    // Implicit destruction of a
}

c) It is not manditory but advisable to disable the copy constructor for all 
'hook' classes.
-- 
================================================================
David Orchard                                   [EMAIL PROTECTED]
================================================================

Reply via email to