Я оказался в ситуации, когда мне хотелось бы иметь аналог unique_ptr
release()
для std::vector<>
. Например.:
std::vector<int> v(SOME_SIZE);
//.. performing operations on v
int* data = v.release(); // v.size() is now 0 and the ownership of the internal array is released
functionUsingAndInternallyDeletingRowPointer(data);
Есть ли особая причина, по которой такая возможность не предоставляется? Может ли это наложить некоторые ограничения на внутреннюю реализацию std::vector
?
Или есть способ добиться этого, что мне не хватает?
std::vector
? Я думаю, вы обнаружите, что реализацияrelease
для этого чрезвычайно нетривиальна. - person tadman   schedule 09.11.2016std::vector
с разрушением так, как не смог бы простойdelete []
? - person Emerald Weapon   schedule 09.11.2016std::vector
не позволяет вам украсть право собственности на базовые данные, как это делаетstd::unique_ptr
. - person Cornstalks   schedule 09.11.2016capacity
иreserve
. (И сноваint
слишком просто.) - person Kerrek SB   schedule 09.11.2016release
. Таким образом, данные можно было перемещать в классы, не связанные сstd::vector
. Я думаю, что изменения в семантике перемещений, связанные с STL, слишком консервативны. Некоторые детали должны быть проработаны, например, как передать информацию о распределителе. Но я предполагаю, что это можно передать, если релиз возвращаетunique_ptr
илиshared_ptr
(stackoverflow.com/questions/33845132/) - person alfC   schedule 13.12.2017