여기서 두 번째 "if"문을 사용하는 것을 이해하지 못합니다. 0보다 큰 "newcapacity"를 이미 테스트하고 있다면 "Tptr"을 0으로 할 수 있습니까? 다른 번호가 "newcapacity"로 "Tptr"을 0으로 만들 수 있습니까?두 번째 "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는 오류 메시지가 무의미하다고 생각했을 것입니다. 확실히 정상적인 던져,'new'에서 반환되는'null' 포인터를 검사하는 코드를 보았습니다. 많은 글이 '새롭지 않다'는 언급조차하지 않기 때문에 OP가 의미를 이해하지 못했다는 것이 이해할 수 있다고 생각합니다. 또 다른 주석이 지적한 것처럼,'new'를 사용한 후에 null을 체크하는 C++ FAQ 항목은'nothrow'를 언급하지 않으며 절대 컴파일러에 관한 유일한 예외를 제외하고 null을 확인할 필요가 없다는 절대적인 선언을 만듭니다. –