我遇到了这种 C++ 工厂模式,我喜欢所有权属于消费者的方式:
class MyClass {
public:
void Create(MyClass **instance, int some_param);
void Destroy(MyClass *instance);
void SomeAction() = 0;
}
// Use it
MyClass *instance;
MyClass::Create(&instance, 5);
instance->SomeAction();
MyClass::Destroy(instance);
但是如何实现Destroy
呢?我想 Create
看起来像这样:
void MyClass::Create(MyClass **instance, int some_param) {
// Subtype in some way derived from some_param
if (some_param == 1) {
*instance = (MyClass *) new MyClassSubClass();
}
// if some_param == 2, use MyDifferentSubClass() etc...
}
我已经为 Destroy
尝试了类似下面的方法,但无法让它工作:
void MyClass::Destroy(MyClass *instance) {
delete instance;
}
也许 delete
需要知道特定的子类(知道它的分配大小)?但这似乎也不起作用:
void MyClass::Destroy(MyClass *instance) {
if (some_param == 1) {
delete (MyClassSubClass *)instance
}
}
非常欢迎任何输入或替代方法。
最佳答案
delete(instance);
应该可以。您忘记在 MyClass 中添加虚拟析构函数:
class MyClass {
public:
virtual ~MyClass();
void Create(MyClass **instance, int some_param);
void Destroy(MyClass *instance);
void SomeAction() = 0;
}
关于c++ - 在 C++ 工厂中删除实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13472456/