我发现此类定义(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
被摧毁时。
我想知道:
答案 0 :(得分:2)
在许多情况下,销毁委派实际上有所帮助。我遇到过代码 - 破坏成本非常高,因此设计人员不希望在调用流程中销毁对象 - 而是将其委托给另一个线程级别并在后台删除它(理想情况下,当系统不忙时) )。在这种情况下,垃圾收集器(在另一个线程中)会破坏对象。
这有时也用于快速切换数据(用于数据刷新的情况)并轻松删除旧数据。我认为它与Java的gc
中的概念类似。
关于这个特定设计是否有效/有用,可能如果你添加整体概念,它可能有助于我们添加一些建议。实际上,我已经对你问题的第二部分给出了一些暗示。 HTH!