У меня есть два указателя, указывающих на один и тот же объект, и мне нужно их правильно удалить (удалить каждый объект A и внутренний объект B). Но проблема в том, что у общего объекта все еще есть память, выделенная после удаления: Висячий указатель. Как я могу избежать такой проблемы без использования интеллектуального указателя.Два указателя на тот же объект
class A
{
public:
class B
{
private:
A* m_x;
A* m_y;
public:
B(A* x, A* y);
~B();
};
B* m_b;
A(){};
void Join(A* other);
~A();
};
void A::Join(A* person)
{
this->m_b= new A::B(this, person);
person->m_b= this->m_b;
}
A::~A()
{
if (m_b)
{
delete m_b;
m_b= NULL;
}
}
...
A aa = new A();
A cc = new A();
aa->Join(cc);
delete aa
// here I have a problem in deleting the *m_b because it's deleted by the first A
delete cc;
Можете ли вы показать свои деструкторы '~ A()' и '~ B()'? –
Вам, вероятно, нужно будет выполнить подсчет ссылок самостоятельно, если вы не хотите использовать 'std :: shared_ptr'. –
@MaksimSolovjov Я добавил свой A destructor –