在c ++中发布()或工厂销毁函数

时间:2015-04-08 00:28:16

标签: c++ interface coding-style

我正在用c ++编写一个dll库。它只会导出一些带有一些纯虚拟接口的工厂创建功能。 现在我想知道哪种设计更好,例如我们有这样的东西:

API_EXPORT IFactory* CreateFactory();
API_EXPORT Destroy(IFactory* pFactory);

class IFactory
{
  public:
  virtual InterfaceA* CreateA() = 0; 
  virtual InterfaceB* CreateB() = 0; 
  virtual InterfaceC* CreateC() = 0; 
  virtual InterfaceD* CreateD() = 0;
  // virtual void Destory(InterfaceA* p) = 0;
}

假设我从Factory获取界面,完成后我有两种方法可以删除它。

IFactory* myFactory = CreateFactory();
InterfaceA* myInterface = myFactory->CreateA();
......
......
Method 1:
myFactory->Destroy(myInterface);

Method 2:
class InterfaceA
{
....
virtual void Release() = 0;
}
CImplementationA::Release()
{
    delete this;
}
myInterface->Release();

第二种方法似乎更优雅,因为用户不必在任何地方都持有myFactory对象。但如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:1)

我更喜欢第二种方法。一旦一个对象产生,它应该遵循OOP的指导方针来管理自己。我认为没有理由将毁灭责任交给其他人,比如工厂职能。