我使用的几个项目boost::shared_ptr
或std::shared_ptr
广泛(我可以转换成任何一种实现很快就好了,如果有一个很好的回答这个问题的一个,而不是其他)。 升压实现使用Boost.Assert以避免在遇到在一个空(NULL)的指针的情况下,返回operator*
或operator->
在运行时; 而的libc ++实现似乎缺乏任何检查。
虽然课程的有效性shared_ptr
使用前应进行检查,大,混合模式的代码库使我想尝试一个异常抛出的变化; 因为大部分的代码是相对识别异常,并会在最失败的一个高的水平,但可恢复状态,而不是std::terminate()
或段错误。
我应该如何最好的自定义这些访问,同时保持稳健shared_ptr
? 看来,封装shared_ptr
在throwing_shared_ptr
可能是最好的选择,但我警惕打破了魔术。 我是不是最好关闭复制升压源,只是改变了ASSERT
s到适当的throw
声明?
到处用于适当的实际类型名称smart_ptr<T>
类型是从宏观扩展一个typedef; 即ForwardDeclarePtr(Class)
扩展为类似:
class Class;
typedef boost::smart_ptr<Class> ClassPtr;
一切通过,需要,或者存储有ClassPtr
-这样我就可以自由地漂亮取代的基础类型; 我怀疑这减轻了潜在的切片/隐藏的问题。