gpt4 book ai didi

c++ - 在 C++ 中抛出 NullPointerException

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:23 27 4
gpt4 key购买 nike

是否可以让 C++ 在对 nullptr 对象调用方法时抛出 NPE,而不是进入未定义的行为?我可以为 SEGFAULT 信号创建处理程序,但这真的很危险,因为并非每个 SEGFAULT 都是 NullPointerException。如果我必须通过检查 if 子句来做到这一点,是否有有效的方法来做到这一点?也许也在编译时?

最佳答案

是的,你可以,但这不是一个好主意(无论如何你都不应该处理指针,在现代 C++ 中,指针保存在管理其生命周期的对象中)。

您始终可以定义一个保存指针的类。然后,当您尝试使用 operator->() 时,如果持有的指针是 nullptr,它将抛出。

template<typename T>
class ThrowingUniquePtr
{
T* ptr;
public:
// STUFF to create and hold pointer.

T* operator->()
{
if (ptr) {
return ptr;
}
throw NullPointerException; // You have defined this somewhere else.
}
};

class Run
{
public:
void run() {std::cout << "Running\n";}
};
int main()
{
ThrowingUniquePtr<Run> x(new Run);
x->run(); // will call run.

ThrowingUniquePtr<Run> y(nullptr);
y->run(); // will throw.
}

关于c++ - 在 C++ 中抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36970839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com