, " ", , . , , , :
template <typename T>
void MyDynamicArray<T>::resize(size_t count)
{
resize_common(count, [] { m_block.DefaultConstruct(); });
}
template <typename T>
void MyDynamicArray<T>::resize(const T &object, size_t count)
{
resize_common(count, [&] { m_block.CopyConstruct(object); });
}
template <typename T, typename lambda_t>
void MyDynamicArray<T>::resize_common(size_t count, lambda_t &&lambda)
{
size_t prev_count = Count();
if(count < prev_count)
{
DestroyMemory(prev_count, count);
}
else if(count > prev_count)
{
Reserve(count);
for(size_t i=prev_count; i<count; i++)
{
lambda();
}
}
}
, , , , :
template <typename T>
void MyDynamicArray<T>::resize(size_t count)
{
resize_common(count, null);
}
template <typename T>
void MyDynamicArray<T>::resize(const T &object, size_t count)
{
resize_common(count, &object);
}
template <typename T>
void MyDynamicArray<T>::resize_common(size_t count, const T *object)
{
size_t prev_count = Count();
if(count < prev_count)
{
DestroyMemory(prev_count, count);
}
else if(count > prev_count)
{
Reserve(count);
for(size_t i=prev_count; i<count; i++)
{
if (object)
m_block.CopyConstruct(*object);
else
m_block.DefaultConstruct();
}
}
}
, . , " " , , , . ? ? ....