В ситуации, когда у нас есть объект производного класса, связанный с указателем базового класса bPtr
, и указатель производного класса dPtr
, указывающий на тот же объект через dynamic_cast<D*>
, каков правильный способ очистки ресурсов?
class B {
public:
B() { cout << "B_ctor" << endl; }
virtual ~B() { cout << "B_destructor" << endl; }
virtual void foo() { cout << "B_foo()" << endl; }
};
class D : public B {
public:
D() { cout << "D_ctor" << endl; }
~D() { cout << "D_destructor" << endl; }
void foo() { cout << "D_foo()" << endl; }
};
int main()
{
B * bPtr = new D;
D * dPtr = dynamic_cast<D*>(bPtr);
bPtr->foo();
dPtr->foo();
//delete bPtr;
delete dPtr;
}
Я решил удалить dPtr
.Я также могу выбрать bPtr
.Всякий раз, когда я делаю оба компилятора VS2015 высвечивает ошибку.Таким образом, мой вопрос, что является стандартным способом справиться с данной ситуацией?
Кроме того, всякий раз, когда я изменяю свой код на
D d;
B * bPtr = &d;
D * dPtr = dynamic_cast<D*>(bPtr);
, я не могу удалить ни один из указателей.Программа просто прерывается.Почему?