template < typename ArrayType >
ArrayType *VectorToArray(ArrayType **p_ppThisBlock = NULL, vector<ArrayType> *p_vThisVector = NULL)
{
// Check to see if both parameters are valid.
if(p_ppThisBlock == NULL || p_vThisVector == NULL)
{
return NULL;
}
else if(p_ppThisBlock != NULL && p_vThisVector != NULL)
{
// Create the array that will store the vector's elements dynamically.
p_ppThisBlock = new ArrayType[ p_vThisVector -> size() ];
// Initialize the array.
for(unsigned uIndex(0); uIndex < p_vThisVector -> size(); uIndex++)
{
p_ppThisBlock[ uIndex ] = p_vThisVector[ uIndex ];
}
// Return the pointer that pointing to the new block of memory. Is this relevant?
return p_ppThisBlock;
}
}
我的问题是:是否返回我在此函数中创建的相关内存块?(第12行)。我应该返回这个内存块吗?
噢,我的。你为什么做这个?你不能只用`&v [0]`?至少,确保使用智能指针(使用数组删除器);否则这段代码肯定不是异常安全的。 – 2011-01-24 23:30:07
除此之外,你写的甚至不能正常工作:赋值`p_ppThisBlock = new ArrayType [...]`是ArrayType *和ArrayType **之间的不匹配(应该得到编译器警告在这里);你想要`* p_ppThisBlock = ...`。同样在for循环中,你需要`(* p_ppThisBlock)[uIndex] =(* p_vThisVector)[uIndex]`。 – 2011-01-24 23:58:04