【发布时间】:2018-10-22 09:45:30
【问题描述】:
为避免异常,必须在使用内部指针之前检查指针链中的每个指针。
有没有现代的c++语法,或者一些简单的方法来代替繁琐的:
if (pA && pA->pB && pA->pB->pC)
pA->pB->pC->DoYerThing();
变成下面这样的东西?
if(not_nullptrs(pA->pB->pC))
pA->pB->pC->DoYerThing();
【问题讨论】:
-
"为了避免异常" - 取消引用
nullptr或未初始化的指针not 会导致异常。它会导致未定义的行为。 -
我认为我不需要编写这样的代码。你的用例是什么?
-
TL;DR:不,没有。泄漏并不得不挖掘多个级别的实现细节是代码异味。我建议你重新考虑你的设计。
-
不使用 STL 类型(还)或常规指针。但是为带有绑定/映射指令的指针(a-la Rust 或几乎任何其他类似类型的语言)编写自己的简单
optional是非常简单的。这样你就可以写pA.bind([&](auto p){ return pB; }).bind(...),你明白了。见open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0798r0.html -
@DanM.: 这与我的问题完全一致...