小编rva*_*lue的帖子

自定义std :: shared_ptr或boost :: shared_ptr以在NULL取消引用时抛出异常

我有一些项目使用boost::shared_ptrstd::shared_ptr广泛使用(我可以很快转换为任何一种实现,如果对于一个问题有一个很好的答案,而不是另一个).Boost实现使用Boost.Assert来避免在运行时operator*operator->运行时遇到空(NULL)指针的情况下返回; 而libc ++实现似乎缺乏任何检查.

当然,shared_ptr在使用之前应该检查a的有效性,一个大的,混合范式的代码库让我想要尝试抛出异常的变异; 因为大多数代码都是相对异常感知的,并且最多会失败到高级但可恢复的状态,而不是std::terminate()或段错误.

我应该如何最好地定制这些访问器,同时保持稳健性shared_ptr?似乎封装shared_ptr在一个throwing_shared_ptr可能是最好的选择,但我担心打破魔法.我最好复制Boost源并将ASSERTs更改为适当的throw语句?


对于适当的smart_ptr<T>类型,到处使用的实际类型名称是从宏扩展的typedef; 即ForwardDeclarePtr(Class)扩展为:

class Class;
typedef boost::smart_ptr<Class> ClassPtr;
Run Code Online (Sandbox Code Playgroud)

一切都通过,接受或存储ClassPtr- 所以我可以非常自由地替换基础类型; 我怀疑这可以减轻潜在的切片/隐藏问题.

c++ exception shared-ptr c++11 libc++

6
推荐指数
2
解决办法
1909
查看次数

标签 统计

c++ ×1

c++11 ×1

exception ×1

libc++ ×1

shared-ptr ×1