C++ 中的 Release() 或工厂销毁函数
Release() or factory destroy function in c++
我正在用 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 获取接口,完成后我有 2 种方法删除它。
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 对象。但如果我错了,请纠正我。
我更喜欢第二种方法。一个对象一旦产生,就应该按照 OOP 的指导方针进行自我管理。我认为没有理由像工厂函数那样把破坏的责任交给其他人。
我正在用 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 获取接口,完成后我有 2 种方法删除它。
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 对象。但如果我错了,请纠正我。
我更喜欢第二种方法。一个对象一旦产生,就应该按照 OOP 的指导方针进行自我管理。我认为没有理由像工厂函数那样把破坏的责任交给其他人。