我找到了这个类定义(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() {}
};
我想知道它是否设计得很好。
当我写一个类时,我倾向于避免委托(delegate)破坏,因为我
不知道委托(delegate)类(在本例中为 Bar)是否会被修改
由不知道 passResponsabilityToBarDestructor
必须调用这一事实的人
aBar
的成员函数将指针 myObj
保存在某处并删除它
当 myObj
被破坏时。
我想知道:
- 这个类是否设计得好
- 如果我的设计努力(当我无法使用智能指针时,我会很头疼) 编写类破坏同一个类中的东西(构造它)是浪费时间。
最佳答案
委托(delegate)销毁实际上在很多情况下都有帮助。我遇到过代码 - 破坏的成本相当沉重,因此设计者不想在调用流程中破坏对象 - 而是将其委托(delegate)给另一个线程级别并在后台删除它(理想情况下当系统不忙时) )。在这种情况下,垃圾收集器(在另一个线程中)会销毁该对象。
这有时也用于快速切换数据(用于数据刷新的情况)并轻松删除旧数据。我认为这与Java的gc
中的概念类似。
关于这个特定的设计是否有效/有用,可能如果您添加整体概念,可能会帮助我们添加一些建议。实际上,我已经对你问题的第二部分给出了一些提示。呵呵!
关于c++ - 委托(delegate)对象销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18331339/