委派对象销毁

时间:2013-08-20 09:17:29

标签: c++ design-patterns

我发现此类定义(T必须派生自TBase), passResponsabilityToBarDestructor不是真实的名字 功能,可悲的是。

template<typename T> 
class Foo
{
public:
   Foo(const std::string& aName, Bar& aBar)
   {
      const TBase* myObj = static_cast<const TBase*>(new T);
      NiceNameSpace::passResponsabilityToBarDestructor(aName, myObj, aBar);
   }
   virtual ~Foo() {}
};

我想知道它是否设计得很好。 当我写一堂课时,我倾向于避免委托破坏 不知道是否要修改委托类(在本例中为Bar) 有人不知道passResponsabilityToBarDestructor必须打电话的事实 aBar的成员函数将指针myObj保存在某处并删除它 当myObj被摧毁时。

我想知道:

  1. 如果这个课程设计得很好
  2. 如果我的设计努力(当我不能使用智能指针时,我会头疼 写类破坏构建它的同一类中的东西)是浪费时间。

1 个答案:

答案 0 :(得分:2)

在许多情况下,销毁委派实际上有所帮助。我遇到过代码 - 破坏成本非常高,因此设计人员不希望在调用流程中销毁对象 - 而是将其委托给另一个线程级别并在后台删除它(理想情况下,当系统不忙时) )。在这种情况下,垃圾收集器(在另一个线程中)会破坏对象。

这有时也用于快速切换数据(用于数据刷新的情况)并轻松删除旧数据。我认为它与Java的gc中的概念类似。

关于这个特定设计是否有效/有用,可能如果你添加整体概念,它可能有助于我们添加一些建议。实际上,我已经对你问题的第二部分给出了一些暗示。 HTH!