对于介绍性 C++ 课程作业(当然是今晚到期!),我必须实现自己的 Vector 类。几乎一切似乎都在工作,除了我在 VS2012 的调试器中注意到,似乎实际上只分配了 _arr[] 中的一个元素。不管请求的元素数量(n)是多少,它只分配数组中的一个元素。我跟踪了调试跟踪,new[] 收到了 20 个请求(请求的 5 个元素 * 4 个字节的 int),但是当我稍后检查 sizeof(_arr) 时,它只显示 4 个字节。其他 16 个字节到哪里去了?为什么缺少其他 4 个元素?没有错误指示,也没有抛出异常。
template <typename T>
void Vector<T>::Add ( const T& val )
{
// Check if a new element would grow beyond the current allocation.
if ( _length + 1 > _allocSize )
{
size_t n = 5; // <-- Set statically for this example
// Create a new array of the requested size
try
{
T* newArr = new (std::nothrow) T[n]();
if( newArr == NULL )
throw VectorException( VECTOR_CANNOT_GROW,
"Vector::Add", _length, n );
// Copy the old array into the new array
if( _length > 0 )
for( size_t idx = 0; idx < _length; idx++ )
newArr[idx] = _arr[idx];
// Delete any dynamic memory allocated to the old array.
delete[] _arr;
// Note: _sizeof(newArr) here indicates only 4 bytes!!!
// Point _arr to the new array
_arr = newArr;
// Update the allocated size to the new array size
_allocSize = n;
}
catch ( VectorException &cException )
{
cerr << cException.GetError() << endl;
DoExit( cException.GetErrorNum() );
}
}
// Add the new item to the end of the array and update the length.
_arr[ _length++ ] = val;
}
此外,我已经能够按预期使用向量,但恐怕我实际上只是在访问正确的数组之外的内存。它似乎被分配给程序,但它没有出现在数组中。
还是我只是糊涂了,真的一点问题都没有?
谢谢你的帮助!