使用boost工厂按要求生产产品C ++

时间:2012-10-19 15:40:32

标签: c++ boost factory

让我感到困惑的是,我不想用像'Product_ptr productA'这样的指针创建一个对象,还有其他一些方法吗?另外一个问题是我的所有产品都使用DoSomething(),但我也想为不同的产品添加不同的属性,如何实现这一目标?谢谢你的建议!!

1 个答案:

答案 0 :(得分:1)

通常,在处理动态创建的对象时,无法避免使用C ++中的指针。你必须管理和传递这些对象的所有权,这当然是用指针完成的,当然主要是智能指针。

尽管有一些方法可以隐藏它们,例如维护某些中心点(工厂)中对象的所有权,并通过引用将它们传递给消费者。这种方式有几个缺点,例如,消费者需要明确释放对象,以便工厂可以销毁它而不浪费资源。但是如果你的对象很轻,并且它们的寿命与整个程序或特定工厂的寿命相同,那么这可能很有用。

示例:

template <class Product>
class Factory
{
   // List elements are unaffected by insertion/deletion
   // Could be also container of smart pointers if objects need
   // to be created directly on heap
   std:list<Product> m_objects;

public:

   Product& CreateProduct()
   {
      m_objects.push_back(Product());
      return m_objects.back();
   } 

};

// Usage
Factory<MyProduct> factory;
MyProduct& prod = factory.CreateProduct();
...

这种解决方案是可行的,但有局限性,不要在没有实际需要的情况下使用它。 从工厂返回适当的智能指针,例如std::shared_ptr更可取,因为它为您提供了对象所有权的显式语义,并使代码更清晰,可维护和防错。