0

我创建了一个指向双数组的指针向量。这些指针在函数(即InsertIntoVector)退出后是否有效?如果我稍后获取指针GetVecElement,是否仍然保证指针指向它们分配的相同内存位置?

class A { 
   vector<double*> vec; 

   void insertIntoVector(double x, double y); 
   void GetVecElement(int i, double& x, double& y); 
}; 

A::insertIntoVector(double x, double y) { 
   double* xy = new double[2]; 
   xy[0] = x; xy[1] = y; 
   vec.push_back(xy);       
}

A::GetVecElement(int i, double& x, double& y)
{
    x = vec[i][0];       // will the reference to the double array still be valid? 
    y = vec[i][1];
}
4

2 回答 2

2

那些不是参考!那些是指针...

如果我稍后在 GetVecElement 中获取指针,是否仍然保证引用指向它们分配的相同内存位置?

您没有删除指针,std::vector也不会为您删除,所以是的,指针将保持有效。除非您在's 的析构函数中手动操作它们,否则它也会被泄露。但为此,您还需要一个复制构造函数和一个赋值运算符,以克隆.deleteAvector

于 2012-06-08T23:56:51.337 回答
0

您使用 GetVecElement 函数通过引用参数获取的值是向量元素指向的堆栈上的数组值(您已在 insertIntoVector() 中分配。因为您不会在代码中的任何位置删除这些值(或者至少看起来)这些值仍然存在,但基本上你在这里所拥有的是内存泄漏,除非你有一些额外的代码正在清理这个内存并且你没有在你的例子中上传。当你的向量被删除或清除后,指向向量的 double* 元素的内存位置将持续存在,除非您主动实施一些代码来清理它(这将是一个好主意)。

于 2012-06-09T00:08:41.470 回答