C++ 引用计数和空引用设计 [关闭]

问题描述 投票:0回答:1

我正在研究一个 C++ 引用计数对象实现,而不使用 std::shared_ptr<> 并且没有 C++ 异常。所以,有一个 C++ 模板对象,它包含一个指向实际对象的指针,类似于 shared_ptr<>,并实现引用计数语义。

我正在尝试找出处理“空引用”的最佳设计。典型的方式是指向你的对象的指针是 nullptr。显然,取消引用会导致我试图避免的异常。

我的另一种想法是,对于每个模板用户对象,我还可以创建一个“nil 对象”……它基本上是用户类的默认初始化对象,null 引用指向这个特定的对象。这种方式取消引用不会导致异常,但您仍然可以测试对象是否为空引用。这个设计行得通吗?谢谢。

c++ null counting ref
1个回答
0
投票

很明显,取消引用会导致我试图避免的异常。

这是不正确的。取消引用空指针不会导致抛出异常。它会导致未定义的行为。

所以只为对象指针使用一个空指针值是一个足够的方法。如果您的智能指针的用户试图取消引用空指针,他们将违反您的智能指针的先决条件,并导致未定义的行为。他们根本不允许尝试。无论是否启用异常都是如此。

同样适用于

std::shared_ptr
。它也不使用异常,除了实现
std::weak_ptr
的部分和控制块的分配失败。

© www.soinside.com 2019 - 2024. All rights reserved.