class B;
class A
{
private:
unsigned int x;
B *m_pParent;
public:
A(B* parent) : m_pParent(parent)
{
x = rand();
}
~A()
{
m_pParent->doCleanup();
}
unsigned int getSomeVariable()
{
return x;
}
}
class B
{
private:
A* m_pChild;
public:
B()
{
m_pChild = new A (this);
}
void doCleanup()
{
m_pChild->getSomeVariable();
}
}
Таким образом, класс A имеет кучу кода очистки в своем деструкторе, один из которых вызывает функцию класса B с указателем на A, чтобы использовать некоторые из A переменные получают функции в процедуре очистки внутри B.Безопасен ли этот код? Функции вызова из класса, который разрушается
Теперь я знаю, что это не большой дизайн, но с этим я должен работать. Я изучаю некоторые журналы сбоев, и кажется, что это то, что может вызвать крушение. Может ли быть так, или этот код безопасен?
Объект разрушается вне сферы действия обоих классов.
Где находится объект? Я вижу вызов 'new', бит no call to' delete'. – juanchopanza
Извините, что не было ясно, A удаляется за пределами области действия обоих классов, поэтому есть вызов функции очистки B, так что он знает, что объект уничтожается. –
Код, который вы опубликовали, безопасен. Однако я сомневаюсь, что это все (реальный) код, который вы используете, так что все еще могут быть проблемы с тем, как вы действительно делаете что-то. – Cornstalks