Я оказался в ситуации, когда мне бы хотелось иметь аналог unique_ptr
release()
для std::vector<>
. Например:Почему 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
?
Или есть способ достичь этого, что я смущающе не хватает?
Зачем? Если вы думаете, что это должно быть так, возможно, лоббирование комитета C++. Имейте в виду, что они обычно выступают против добавления бессмысленных излишеств в контейнеры для ядра. Почему бы просто не удалить и воссоздать объект 'std :: vector'? Я думаю, вы найдете реализацию 'release', потому что это чрезвычайно нетривиально. – tadman
Ваш пример слишком упрощен. Как вы узнаете, какие деструкторы позвонить? Как бы вы нашли правильный распределитель? –
@ Kerrek SB Да, я думал об этом виде проблематики, но я точно не вижу смысла. Уничтожает дескриптор 'std :: vector' таким образом, что простой' delete [] 'не сможет? –