gpt4 book ai didi

c++ - 可选错误处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:00 25 4
gpt4 key购买 nike

我有一个创建方法,如下所示,我想(如果返回是一个空指针)从中获取错误。但是我希望这个错误处理是可选的,而不是调用函数的必要条件。

代码:

class foo {
foo() {...};
public:
~foo();
static foo* createFoo(int aparam = 42, int bparam = 10, int& error = ?) {
afoo* = new foo();
if (!afoo) {
error = 11;
return 0; //NULL
}
...
return afoo;
}

}

所以我可以决定使用:

foo* myfoo = createFoo(42);
if (!myfoo) { ... }

或者

int errorcode = 0;
foo* myfoo = createFoo(42, 10, errorcode);
...

此时(在我的真实代码中),我只是使用空指针(而不是 ref)并在给它错误之前在 createFoo 代码中确定它的有效性。

我的兴趣在于针对这种情况的最佳实践

最佳答案

我不知道我能否提供最佳实践,但这是我的观点。

检查 NULL(分配失败)是 C 和 C++ 中的标准做法,这是一个很好理解和容易识别的习惯用法。添加一个可选的错误代码,在提供灵 active 的同时,也增加了可以说是不必要的复杂性。调用者需要决定是否使用该参数。

除非他们觉得在那个位置可能失败,否则他们为什么要使用该参数?怎么会

如果您觉得错误代码很重要。我会建议备用签名,您始终检查返回代码,而不检查返回指针的值:

// Returns error code.
static int createFoo(int, int, Foo **);

这可能是一个不太方便的函数,但可以将调用者(用户)推向正确的方向。

或者,您可以使用异常,确保抛出 std::bad_alloc,或者抛出您自己创建的带有适当错误代码的异常。这似乎是最干净的签名:

struct fooException { int error; }

// Throws fooException if cannot create foo.
static foo * createFoo(int, int);

我的理念是:尽量减少复杂性。在这种情况下,通过删除似乎无关的选项。 错误代码要么很重要并且应该始终使用,要么是无关紧要的并且将始终被忽略。

关于c++ - 可选错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5306801/

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