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]'? На минимальном минимуме обязательно используйте интеллектуальный указатель (с удалением массива); в противном случае этот код, безусловно, не является безопасным. –
И в дополнение к тому, что вы написали, даже не работает правильно: назначение 'p_ppThisBlock = new ArrayType [...]' является несоответствием между 'ArrayType *' и 'ArrayType **' (должно получиться предупреждение компилятора здесь); вы хотите '* p_ppThisBlock = ...'. Аналогично в цикле for вы хотите '(* p_ppThisBlock) [uIndex] = (* p_vThisVector) [uIndex]'. –
Что вы должны делать, если один, но не оба, указатели 'NULL'? например, 'VectorToArray (blck, NULL)'? Сейчас этот случай вообще не обрабатывается. –