独自のメモリ割り当てを使用する適切なクラスの設計に問題があります。このことを考慮:
class IAbstract { ... };
class CConcrete : public IAbstract { ... };
私はこのようなことをしたい:
IAbstract *ptr = new CConcrete();
delete ptr;
問題は、CConcrete の「新規」にメモリ アロケータを使用してもらいたいということです。また、「削除」で適切なデアロケータを使用したい。ただし、new と delete は静的関数であるため、上記の例の delete は CConcrete の delete を呼び出しません (delete が仮想の場合は呼び出します)。
これを解決する 1 つの方法は、次のようなものを作成することです。
class IAbstract {
public:
virtual Delete(void* ptr)=0;
void operator delete(void* ptr) {
((IAbstract*)(ptr))->Delete(ptr);
}
};
派生クラスで Delete をオーバーライドします。しかし、このソリューションはかなり醜く、特に ptr を IAbstract* にキャストします。
それを行うより良い方法はありますか?