让我感到困惑的是,我不想用像“Product_ptr productA”这样的指针创建一个对象,还有其他方法吗?另一个问题是我所有的产品都使用DoSomething(),但是我也想给不同的产品添加不同的属性,如何实现呢?谢谢你的建议!!
问问题
310 次
1 回答
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
是更可取的,因为它为您提供了对象所有权的明确语义,并使代码更清晰、可维护和防错。
于 2012-10-19T16:28:43.420 回答