@MuffinLover

Почему здесь мемори лик, а здесь нет?

https://gist.github.com/stepan-neretin7/38344819e7...
А почему вот так memory leak нет, а вот если в BigInt.cpp заменить конструктор на такой, то появится
BigInt::BigInt(){
numbers = SimpleVector();
}
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Оператор присвоения не проверяет, а были ли какие-то данные выделены уже. Когда вы используете код из вопроса в конструкторе, то numbers все равно создается и инициализируется конструктором по умолчанию, который выделяет память. Уже потом выполняется тело конструктора BigInt и вы затираете выделенный указатель другим указателем.

Но у вас и в SimpleVector(const SimpleVector &other) ошибка - оно просто копирует указатель. После чего два экземпляра SimpleVector будут указывать на одни и те же данные. И оба попытаются удалить их в конце. Так что там у вас и доступ к удаленной памяти и двойное удалиение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы