gpt4 book ai didi

c++ - 为什么 std::vector 没有释放方法?

转载 作者:太空狗 更新时间:2023-10-29 23:49:31 26 4
gpt4 key购买 nike

我发现自己处于一种我希望拥有 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 施加一些约束是内部实现吗?

或者有一种方法可以实现这一点,但我很尴尬地错过了?

最佳答案

functionUsingAndInternallyDeletingRowPointer

这个函数到底是做什么的?因为该内存是通过调用 std::allocator_traits<std::allocator<T>>::allocate 分配的,它希望通过调用 std::allocator_traits<std::allocator<T>>::deallocate 将其删除.此外,vector 的每个元素是通过调用 std::allocator_traits<std::allocator<T>>::construct 构建的,因此必须通过调用 std::allocator_traits<std::allocator<T>>::destroy 来销毁.

如果该函数尝试执行 delete []在那个指针上,它不会工作。或者至少,它不是工作的必需

能够从 vector 中提取内存缓冲区可能是合理的并直接使用。但它不能仅仅是一个指针。它必须有一个分配器。

关于c++ - 为什么 std::vector 没有释放方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40514362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com