Hey guys. I am working on a callback system of sorts for a UI management class. This is my setup, it seems to work. I am just wondering if you guys have any comments / suggestions on the design. Basically I am trying to hook up events like button clicking and other events, with member functions of a class as them item to callback to.

Think of CCallBackClass as being a UI item(button, label, etc)
Think of CCallBackManager as the dispatcher of events(Clicks, Mouse overs, etc)

Here is sample of the design
Code:
#include <iostream>
#include <vector>

template<class T>
class CCallBackClass
{
public:
	CCallBackClass(T *callbackOwner)
	{
		mOwner = callbackOwner;
	}

	void(T::*OnCallback)();
	
	void DoCallback()
	{
		(*mOwner.*OnCallback)();
	}
private:
	T* mOwner;
	
};

template <class T>
class CCallBackManager
{
public:
	void Add(CCallBackClass<T> *pCallback)
	{
		mCallbacks.push_back(pCallback);
	}

	bool Update()
	{
		//Some random case, where we should call back
		//hardcoded for simplicity sack, most likely
		//will be a loop going over all the callbacks
		//contained and checking conditions to callback
		if(rand() % 10 == 3){
			mCallbacks[0]->DoCallback();
			return false;
		}//if
		return true;
	}
private:
	std::vector<CCallBackClass<T> *> mCallbacks;
};

class CNeedsCallback
{
public:
	CNeedsCallback()
	{
		//
		//Create the callback for this class
		//
		mCallback = new CCallBackClass<CNeedsCallback>(this);
		mCallback->OnCallback = &CNeedsCallback::CallbackFunction;

		//Add it to the callback manager, for keeping the status
		mCallbackManager.Add(mCallback);
	}
	~CNeedsCallback()
	{
		delete mCallback;
	}
	
	void Update()
	{
		while(mCallbackManager.Update())
		{
		}
	}
	void CallbackFunction()
	{
		std::cout<<"I was called back";
	}	

	CCallBackManager<CNeedsCallback> mCallbackManager;
	CCallBackClass<CNeedsCallback> *mCallback;
};



int main()
{
	CNeedsCallback myCallbackNeed;

	myCallbackNeed.Update();

	std::cin.get();
}
Thanks for any input.