代码之家  ›  专栏  ›  技术社区  ›  Igor

在哪里删除工厂创建的对象?

  •  14
  • Igor  · 技术社区  · 14 年前

    如果我有一个工厂,它创建一个对象并返回指向它的指针,那么删除它的更好方法是:

    delete 调用“用户”代码,或通过新的 DestructObject 我和工厂应该有哪些职能?

    4 回复  |  直到 9 年前
        1
  •  14
  •   Marcelo Cantos    14 年前

    在一般情况下,工厂可能不会使用普通的旧设备 new 分配对象。它可以使用对象和/或页池, malloc 新的 ,或者更奇特的东西(内存映射?)。至少有三种方法可以解决这个问题:

    1. recycle 方法在处理完对象时调用。
    2. 返回一个智能指针,该指针知道在没有引用的情况下如何删除对象。
    3. 实现自定义 delete 对象本身中的运算符。

        2
  •  1
  •   BlueRaja - Danny Pflughoeft    14 年前

    手动删除它的最佳方法是 not at all .

        3
  •  1
  •   Sergey    14 年前

    下面的代码提供了一个机会,不必考虑谁应该删除新创建的对象。

    class FooFactory
    {
    public:
        static std::auto_ptr<Foo> CreateInstance();
    };
    
    // transmit ownership of created object from factory to 'a' variable
    std::auto_ptr<Foo> a = FooFactory::CreateInstance();
    // using the created object is not required
    FooFactory::CreateInstance();
    
        4
  •  0
  •   valdo    14 年前

    这个问题最通用的解决方案是从具有虚拟“killing”函数的基类派生类。像这样:

    class IDisposable {
    public:
        virtual void Release() = 0;
    };
    

    Release 函数:调用 析构函数并通过适当的方法释放内存。

    处理对象dest

    两者:销毁

    从工厂返回的对象将实现这个“接口”。