c++ - 使用boost factory按需生产产品C++

标签 c++ boost factory

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

最佳答案

通常,在处理动态创建的对象时,您无法避免使用 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 更可取,因为它为您提供了关于对象所有权的明确语义,并使代码更加清晰、可维护和防错。

关于c++ - 使用boost factory按需生产产品C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977753/

相关文章:

c# - 这有设计模式吗?

.net - 阻止将特定的程序集添加到我的工厂项目中?

c++ - CGAL 修改现有的多边形

c++ - boost 分词器重新分配

C++ - 时区转换

c++ - async_connect 在 GNU/Linux 下真的是异步的吗?

c++ - 我如何将 boost::spirit X3 与 QString 结合使用?

java - 将参数传递给枚举抽象方法

c++ - 如何找到 Internet Explorer(IE) 缓存文件的完整路径?

c++ - 如何使用添加到 MFC Doc/Frame 项目的对话框的初始化列表