当C++中不存在对象时,如何使其清楚
How to make it clear when an object does not exist in C++?
我有一个类,根据应用程序的状态和用户选项,它可能不总是能够以任何有意义的状态存在。
当对象不存在时,最好的方法是什么?
到目前为止,我想到了两个想法,以及为什么我不相信它们不是答案:
- 当对象不存在时,智能指针设置为NULL,这会发送一个明确的消息,表明这里没有对象,但我读到使用"new"的动态内存分配应该是例外,而不是C++中的规则,它还阻止我通过引用其他函数来传递(因为指针可能并不总是指向对象)
- 对象中的布尔标志,当设置该标志时,会导致调用的任何方法引发异常。这需要对每种方法进行检查,感觉像是一个拼凑。我还认为,最好的做法是,所有存在的对象都应该是有效的,我们不需要调用validate(或类似)函数,因为对象的存在意味着它已经有效,可以调用它的方法
boost::optional<T>
。它的存在正是出于这个原因。
我认为您想要NULL对象模式。
您从基类继承了它的"null"实现。因此,它与主对象具有相同的方法和属性,但不执行任何操作。然后将其作为一个常量。每当变量不处于可用状态时,将其分配给null对象。如果使用它,不会发生任何错误,并且您可以检查它是否等于您的null对象实例。
您可以创建一个表示NULL版本的对象的子类。请参阅维基百科上的NULL对象模式。
使用共享库,当您使用dlsym()导出符号时,如果成功导出,则对象存在,否则对象不存在。
相关文章:
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 在数字之间插入 + 或 - 符号以使其等于整数
- C++中的双边友语函数:如何使其编译?
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 提升库,使其成为C++标准
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 如何修复阵列以使其正确?
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- C++如何简化此模板以使其不专业?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 以编程方式防止重命名或删除文件,但仍使其可写
- scanf() 的宽度说明符 - 要使用的字符长度在编译时不固定,仅在运行时确定.如何使其可变?
- SDL_Image库会使程序崩溃或使其行为异常
- C++ 运算符"="重载 - 在 lhs 上获取向量中的所有值,使其等于 rhs 上的双精度值
- 如何使其小写和大写
- 尝试实现二叉搜索算法,似乎无法使其工作
- 当C++中不存在对象时,如何使其清楚