我目前正在设计一个大致如下所示的类层次结构:
struct Protocol
{
// Pass lower-layer protocol as a reference.
Protocol(Protocol & inLLProtocol) :
mLLProtocol(inLLProtocol)
{
}
// A protocol "always" has a LLProtocol.
Protocol & mLLProtocol;
};
struct Layer1Protocol : Protocol
{
// This is the "bottom" protocol, so I pass a fake reference.
Layer1Protocol() : Protocol(*static_cast<Protocol*>(nullptr)) {}
};
*nullptr
只要从不访问引用,IIRC 绑定引用是安全的。所以现在我有责任设计我的 Layer1Protocol 类以防止这种情况发生。
我喜欢这种方法,因为我确保所有用户协议实例都会引用它们各自的低层协议(Layer1Protocol 是例外,但它是核心库的一部分)。我认为这比使用指针更可取,因为一旦引入指针,就可以传递空指针,然后可能需要在运行时检查,结果是大量的指针检查代码和偶尔的错误。
你认为我的基于参考的方法是可以辩护的吗?还是使用空引用总是不好的做法?