[Global Scope]
myClass *objA, *objB, *obj;
int objnum;
I want to switch between objA and objB and assign them alternatively to obj, so in main() I have:
int main()
{
  objA = new myClass(parameters...);
  objB = new myClass(parameters...);
  // start with objA;
  objnum = 0;
  obj = objA;
}
At some point a function is called that switches between the two objects:
void switchObjects()
{
  if (++objnum > 1) objnum = 0;
  obj = objnum == 0 ? objA : objB;
}
And in the function where I use the object, I have:
void doYourJob()
{
  int res = obj->work();
}
Now the weird thing is that if I don't assign obj to either objA or objB, it still works. I would expect an exception, instead. Even if I do obj = NULL;, it still works! What's this voodoo?
OK, I could provide a different example that brings to the same result, without using a NULL pointer:
myClass *obj[2];
int objnum;
void switchObject()
{
  if (++objnum > 1) objnum = 0;
}
void doYourJob()
{
  res = obj[objnum]->work();
}
int main()
{
  obj[0] = new myClass(parameters...);
  obj[1] = new myClass(parameters...);
  objnum = 0;
}
With the above code, regardless of the value of objnum, I still get both objects working together, even if I'm calling work() on only one instance.
And if I replace the function doYourJob() with this:
void doYourJob()
{
  int res1 = obj[0]->work();
  int res2 = obj[1]->work();
}
I always get the results doubled, as if I were calling the function work() twice on every object.
 
    