gpt4 book ai didi

c++ - 我应该归还这个内存块吗?

转载 作者:行者123 更新时间:2023-11-30 03:08:39 25 4
gpt4 key购买 nike

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 行)。

最佳答案

最终;否则会导致内存泄漏。

如果函数正在分配数组并将其留给调用者释放内存,这很好。如果调用者假设内存稍后被释放(并且不是我们在这里看到的),内存泄漏。

为什么不返回 vector< vector< ArrayType > >

编辑:

尝试为该方法提供以下签名。

template <typename ArrayType>
vector<vector< ArrayType> >& VectorToArray(
vector< vector< ArrayType > >& _block,
vector< ArrayType >& _vec )
{
//No need to check parameters

//Initialize the array
for (unsigned uIndex( 0 ); uIndex < _vec.Size(); uIndex++)
{
_block.push_back(_vec);
}

return _block;
}

相同的结果,更少的错误检查,没有泄漏。当然,这需要引用而不是原始指针。

关于c++ - 我应该归还这个内存块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com