相关疑难解决方法(0)

在不释放内存的情况下销毁std :: vector

假设我有一个函数将数据导入std向量:

void getData(std::vector<int> &toBeFilled) {
  // Push data into "toBeFilled"
}
Run Code Online (Sandbox Code Playgroud)

现在我想将这些数据发送到另一个函数,该函数应在完成时释放数据:

void useData(int* data)
{
  // Do something with the data...
  delete[] data;
}
Run Code Online (Sandbox Code Playgroud)

这两个函数(getData和useData)都是固定的,无法更改.复制数据一次时这很好用:

{
  std::vector<int> data;
  getData(data);
  int *heapData = new int[data.size()];
  memcpy(heapData, data.data(), data.size()*sizeof(int));
  useData(heapData);
  data.clear();
}
Run Code Online (Sandbox Code Playgroud)

但是,这个memcpy操作很昂贵而且并不是真正需要的,因为数据已经在堆上了.是否可以直接提取和使用std向量分配的数据?像(伪代码)的东西:

{
  std::vector<int> data;
  getData(data);
  useData(data.data());
  data.clearNoDelete();
}
Run Code Online (Sandbox Code Playgroud)

编辑:

这个例子可能没有多大意义,因为在函数调用useData之后可以释放向量.但是,在实际代码中,useData不是一个函数,而是一个接收数据的类,这个类的寿命比向量长...

c++ vector std stdvector c++11

10
推荐指数
2
解决办法
2387
查看次数

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

我发现自己处于这样一种情况,我希望有一个类似于unique_ptrs release()for的情况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);
Run Code Online (Sandbox Code Playgroud)

有什么特殊原因不提供这种可能性吗?std::vector这会对内部实施施加一些限制吗?

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

c++ stl vector std allocator

6
推荐指数
2
解决办法
4587
查看次数

标签 统计

c++ ×2

std ×2

vector ×2

allocator ×1

c++11 ×1

stdvector ×1

stl ×1