mercredi 27 janvier 2016

How to tell the object of the death of another object?

On my work I have met with one bug which can be described as follows. There are two classes, class A and class B:

class A
{
public:
    void print(){}
};  

class B
{
    A* a;
public:
    void init(A* _a) {
        a = _a;
    }
    void PrintWithA()
    {
        a->print();
    }
};

A* a;
B* b;
b->init(a);

// some code .....
delete a;        // line 1
a = NULL;
// some code .....

b->PrintWithA(); // line 2

Object "b" doesn't know nothing about state of object "a". In line 1 "a"object has been deleted but on line 2 we continue to use it. When there are a lot of code it is very easy to make such mistake. My question is the following - which approch to use to avoid some mistakes? I guess I could use observer pattern - but I think it is unjustifiably expensive solution. Thank's.

Aucun commentaire:

Enregistrer un commentaire