Subj : Re: Can you mimic atexit() for class functions? To : borland.public.cpp.borlandcpp From : "Benjamin Pratt" Date : Wed Oct 08 2003 09:05 pm This is a 'better' way to do the same thing in C++. You'll notice that there is actually no function pointers at all. The previous example works, but is not very safe. Following is the way I would recommend accomplishing your callback container functionality: #include #include class CallbackInterface; class CallbackContainer { public: void AddCallback(CallbackInterface* pCallback) { callbacks.push_back(pCallback); } void DoCallbacks(); private: typedef std::vector CALLBACKS; CALLBACKS callbacks; } g_CallbackContainer; class CallbackInterface { public: CallbackInterface() { g_CallbackContainer.AddCallback(this); } virtual void Callback() = 0; }; class A : public CallbackInterface { public: A(int value) : _value(value) {} void Callback() { std::cout << "A::Callback() = " << _value << std::endl; } private: int _value; }; class B : public CallbackInterface { public: B(float value) : _value(value) {} void Callback() { std::cout << "B::Callback() = " << _value << std::endl; } private: float _value; }; void CallbackContainer::DoCallbacks() { for(CALLBACKS::iterator p = callbacks.begin(); p != callbacks.end(); ++p) (*p)->Callback(); } int main(void) { A a1(1), a2(2), a3(3); B b1(1.5), b2(2.5), b3(3.5); g_CallbackContainer.DoCallbacks(); return 0; } .