2

遗憾的是,我发现这个类定义(T必须派生自TBasepassResponsabilityToBarDestructor不是函数的实际名称。

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. 如果我的设计工作(当我不能使用智能指针时,我会头疼地尝试编写类来破坏构造它的同一个类中的东西)是浪费时间。
4

1 回答 1

2

在许多情况下,破坏授权实际上是有帮助的。我遇到过代码——销毁的成本相当高,所以设计者不想在调用流程中销毁对象——而是将它委托给另一个线程级别并在后台删除它(理想情况下,当系统不忙时) )。在这种情况下,垃圾收集器(在另一个线程中)会销毁该对象。

这有时也用于快速切换数据(用于数据刷新的情况)和轻松删除旧数据。我认为这是一个与gcJava类似的概念。

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

于 2013-08-20T12:48:10.397 回答