c++ - 委托(delegate)对象销毁

标签 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() {}
};

我想知道它是否设计得很好。 当我写一个类时,我倾向于避免委托(delegate)破坏,因为我 不知道委托(delegate)类(在本例中为 Bar)是否会被修改 由不知道 passResponsabilityToBarDestructor 必须调用这一事实的人 aBar 的成员函数将指针 myObj 保存在某处并删除它 当 myObj 被破坏时。

我想知道:

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

最佳答案

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

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

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

关于c++ - 委托(delegate)对象销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18331339/

相关文章:

java - 设计和对象责任的问题

java - 这些构建器模式之间有什么区别(如果有的话)?

java - 决定运行时的方法使用。多态性

c++ - C++20 NTTP 和类型之间的转换

c++如何确保我的函数在被杀死之前完全执行

C++模板问题

c++ - 关于多线程程序中的临时对象

java - 更好的包装和命名安排是什么?

c# - 通用与依赖注入(inject)

c++ - 为什么 ostringstream 比 ofstream 快