如何最好地处理类中的一堆引用

时间:2009-05-19 23:55:44

标签: c++

我有一个类引用了许多其他类。我希望能够逐步添加这些引用(即不是所有的同时在构造函数上),并且我想禁止从我的类中删除这些引用的底层对象的能力,我也想测试NULL-ness在这些参考文献上,所以我知道还没有添加特定的参考文献。什么是完成这些要求的好设计?

6 个答案:

答案 0 :(得分:1)

听起来您可能正在尝试构建Service Locator

作为旁注:我个人建议不这样做,因为it is going to make testing really, really painful if you ever want to do it。构造函数注入(您试图避免的东西)将使测试更容易。

答案 1 :(得分:1)

我同意您应该使用boost::shared_ptr的其他评论。

但是,如果您不希望持有这些引用的类对其引用的对象的生命周期进行部分控制,则应考虑使用boost::weak_ptr来保存引用,然后将其转换为shared_ptr时你想要我们。这将允许在您的类之前删除引用的对象,并且在使用之前您将始终知道对象是否已被删除。

答案 2 :(得分:0)

尽管您使用了boost:; shared_pointer的所有建议,但从您的帖子中明显看出这样做是不合适的,因为该类似乎没有所有权语义。一个普通的C ++指针就可以了。

在一天结束时很难防止通过智能指针删除,因为 智能指针必须以某种形式或其他形式提供对底层哑指针的访问,当然总是可以删除它。对于某些问题,没有技术解决方案,在这种情况下,代码审查是使用包含的指针检测语义错误的最佳方法。

答案 3 :(得分:0)

您想要引用的对象可以使用类似的东西派生。这会阻止你删除它们。

T班 class NonDeletable:public T { 私人的: void operator delete(void *); };

答案 4 :(得分:0)

您很可能正在寻找boost::shared_ptr

答案 5 :(得分:0)

您不应该使用refcounted类,以便在您的主类被销毁之前管理您的引用。