私はこの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
}
}
任意の入力または代替アプローチは大歓迎です。