【发布时间】:2023-03-06 21:45:01
【问题描述】:
从数组初始化向量的直接方法似乎是:
int sizeArr; int * array = getArray(sizeArr);
std::vector<int> vec(array, array+sizeArr);
在这里,我从一个分配内存空间并通过引用设置sizeArr 的函数获取数组。 {开始编辑} 不幸的是,该函数不是我编写的,我需要处理 C 样式数组,然后以某种方式将其转换为向量。 (如果可能有效)。 {结束编辑}
当我初始化vec 时,显然我正在为它单独分配空间。如果我不打算再使用array 的数据,是否有可能以某种方式将array 指向的数据“移动”到向量vec 并且不为其单独分配任何空间?
【问题讨论】:
-
那么当
vec的析构函数被调用时,数据会发生什么? -
我认为从技术上讲,您可以通过创建特殊分配器来做到这一点,但恐怕不会更糟。
-
如果您不需要调整数组大小,那么另一个选项是使用
unique_ptr<int[]>而不是vector。您可能还需要跟踪大小,所以可能是pair<int, unique_ptr<int[]>>。 (这假设getArray使用new[]分配内存。否则您将需要unique_ptr的自定义删除器) -
@user19448 -
I expect the data to be removed向量知道如何删除它已分配的项目。它不知道如何从放置在其中的外来物品中删除物品(如果您尝试这样做)。最好按照其他人的建议使用智能指针。 -
如果内存是在其他dll中分配的,也应该在那里释放。所以你必须使用库接口以任何方式释放这个内存......