Когда типы, такие как Vec
, запустите truncate
, они назовут ptr::drop_in_place
на каждый элемент вектора.Как определить, требуется ли вызов «drop» для типа?
Это не проблема производительности для примитивных типов, таких как int, float и т. Д., Потому что вызовы сброса оптимизированы.
Для более сложных типов контейнеров (те, которые я написал для собственного использования), повторение элементов может быть не таким тривиальным (и может не всегда оптимизироваться).
Есть ли способ проверить, имеет ли тип черту drop, так что в таком случае можно избежать посещения всех членов?
Описание в документации, с которой вы связаны, похоже, подразумевает, что: все типы либо _require drop glue_, либо _implement Copy_, но оба они оба. Это звучит не так. –
@PeterHall Это не означает, что все типы делают одну из этих вещей, и на самом деле явно упоминают типы, которые не являются ни тем, ни другим. Но действительно верно, что «Copy» является взаимоисключающим с наличием drop clue - типов, которые сами являются «Drop» или содержат вещи, которые являются «Drop» (критерии для нанесения клея) никогда не могут быть «Copy». – delnan