Opened 4 years ago

Closed 4 years ago

#535 closed ожидается проверка (задача сдана)

WW #9

Reported by: Денис Лочмелис Owned by: Sokolov Viacheslav
Component: WW shared_ptr Version: 2.0
Keywords: Cc:

Description

V1

Change History (3)

comment:1 Changed 4 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

У класса есть понятные инварианты, которые стоит проверить с помощью assert

Сейчас некоторые методы работают некорректно в случае, если хранится нулевой указатель

Самостоятельно звать деструктор никогда не нужно.

A destructor is a special member function that is called when the lifetime of an object ends. The purpose of the destructor is to free the resources that the object may have acquired during its lifetime.

lifetime у экземпляра точно не закончился внутри метода класса
Деструктор зовется одним из двух способов:

  • delete, если объект был аллоцирован на куче
  • при выходе из scope переменной (аллоцированной на стэке)

Используйте санитайзеры / valgrind, пока что не работает

comment:2 Changed 4 years ago by Денис Лочмелис

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

Понял насчет нулевого указателя, отсюда появились ассерты, плюс нашел один инвариант - положительность ref_count, проверять его осмысленно, кажется, только когда оно уменьшается.

-fsanitize=leak никаких утечек не показывал, поэтому я и отправил. Видимо, valgrind надежнее.

comment:3 Changed 4 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed

https://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-declaration

69 for some reason '&other' can never be NULL
70
assert(&other != nullptr);

&x не может быть nullptr по определению nullptr из Стандарта. nullptr - специально выделенное значение, которое не совпадает с адресом чего-либо еще.

Еще было бы неплохо добавить assert(ref_count_ == 0) в деструктор Storage

Note: See TracTickets for help on using tickets.