我不明白在这里使用第二个“if”语句。如果“Tptr”已经测试了大于零的“新容量”,它怎么能为0?其他一些数字作为“newcapacity”可以使“Tptr”为零吗?
template <typename T>
T* Vector<T>::NewArray(size_t newcapacity)
// safe memory allocator
{
T* Tptr;
if (newcapacity > 0)
{
Tptr = new(std::nothrow) T [newcapacity];
if (Tptr == 0)
{
std::cerr << "** Vector error: unable to allocate memory for array!\n";
exit (EXIT_FAILURE);
}
}
else
{
Tptr = 0;
}
return Tptr;
}
答案 0 :(得分:5)
因为它之前的这一行是必要的:
Tptr = new(std::nothrow) T [newcapacity];
以上是no-throw version of new[]
,当分配失败时返回空指针。所以下一行必然意味着它正在检查new[]
分配是否失败。
if (Tptr == 0) // Check if allocation failed
{
// Allocation has failed
std::cerr << "** Vector error: unable to allocate memory for array!\n";
exit (EXIT_FAILURE);
}
答案 1 :(得分:2)
当机器内存不足并且你要求它不要抛出异常时,它会返回值为0的nullptr
。
答案 2 :(得分:-1)
如果new返回NULL
怎么办?使用malloc
或new
后,您应始终进行空检查。