我不明白在這裏使用第二個「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,唯一的例外是關於過時的編譯器。 –