我不明白在这里使用第二个“if”语句。如果它已经测试了一个大于零的“新容量”,那么“Tptr”如何为0?可以将其他一些数字作为“新容量”使“Tptr”为零吗?第二个“if”语句中可能的逻辑错误?
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;
}
打印出的错误信息是否使原因清楚? – Barmar
@Barmar:我猜RandomPleb可能认为错误信息是毫无意义的。我肯定遇到过检查从空常返回的'null'指针的代码,抛出'new'。没有多少文本甚至提到'nothrow''new',所以我认为OP不理解其意义是可以理解的。正如另一个评论指出的那样,在使用'new'之后检查null的C++ FAQ条目从来没有提到'nothrow',并且几乎绝对地声明了你永远不需要检查null,唯一的例外是关于过时的编译器。 –