I wrote a very small Observeable implementation. When an observer is registered it deletes the old observer and instates the new observer. However it tries to delete the pointer even if it has not been initialized. The code is as below:
Observable.h
class Observable
{
public:
Observable();
virtual void registerObserver(Observer * O);
virtual ~Observable();
protected:
Observer * myObserver;
};
Observable.cpp
#include "Observable.h"
Observable::Observable()
{
}
Observable::~Observable()
{
if(myObserver)
delete myObserver;
}
void Observable::registerObserver(Observer * O)
{
if(myObserver)
delete myObserver;
myObserver=O;
}
all main does is
GUI * gui = new GUI(); // GUI extends Observer
Model * m = new Model(); //Model extends Observable
m->registerObserver(gui); //I get a segfault inside this call
If I step through registerObserver
, I see that even though I have never initialized myObserver
, the statement if(myObserver) evaluates to true. This leads to the uninitialized pointer being deleted and a seg fault.
It's worth noting that if I run the release build I don't get a segfault. I only get the error in the debug build.
I was under the impression that if(myObserver) would only evaluate to true if the pointer was intact. (ie initialized and not deleted).