std :: vector :: shrink_to_fit () не проверяет равенство распределителя - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть свой собственный распределитель стека, который работает с моими тестами, за исключением случаев, когда std::vector::shrink_to_fit()

shrink_to_fit() пытается освободить память с другим распределителем состояний, отличным от того, из которого она была первоначально выделена.

Насколько я понимаю, контейнер должен проверять распределители на равенство, прежде чем память, выделенная из одного распределителя, будет освобождена через другой.Я не прав?

Цитата из: https://en.cppreference.com/w/cpp/named_req/Allocator

a1 == a2 возвращает true, только если память, выделенная распределителем a1, может быть освобождена через a2.Устанавливает рефлексивные, симметричные и переходные отношения.Не выдает исключений.

В моем примере операторы проверки равенства даже не вызываются.

Я использую g ++ 5.4.0.Полный пример кода можно найти здесь: https://onlinegdb.com/ryG9W5sx4

1 Ответ

0 голосов
/ 22 декабря 2018

Копии распределителя должны сравниваться равными.Ваш нет.

(из этого следует, что даже распределитель с сохранением состояния не может иметь встроенное хранилище.)

...