1-ый вопрос:
1)
После использования оператора delete, освобождающего память, обязательно должно производиться обнуление указателя, чтобы впоследствии не произвести повторного освобождения данного участка памяти. Как известно, такое освобождение приводит к непредсказуемому поведению программы.
Применение оператора delete к нулевому указателю не имеет никаких последствий, т.е. вы вполне можете писать delete p, не проверяя предварительно адрес p на NULL. За вас это делает RTL.
2)
В Base нужно, в Derived не нужно.
Делать ещё один delete в деструкторе ~Derived() не нужно, потому что при его вызове вызывается деструктор ~Base(), в котором есть delete (мы его заранее добавили)
Достарыңызбен бөлісу: |