これは、C++ と参照カウント オブジェクト階層を想定した設計上の問題です。私のコードベースの多くのクラスは、共通の基本クラス (ObjectBase) から派生しています。これは、retain() および release() メソッドを実装して、オブジェクト インスタンスの参照カウントを増減します。
オブジェクトのすべてのインスタンスは、多数のユーザー定義可能なメモリ アロケータを使用して、スタックまたはヒープ上に作成できます。オブジェクト インスタンスが release() メソッドで、retainCount が 0 に達したときに自殺する (これを削除する) ためには、インスタンスは、それがどのアロケーターで構築されたかを認識している必要があります。
現時点では、任意のアロケーターを使用してオブジェクト インスタンスにメモリを割り当てています。次に、placement new を呼び出してオブジェクト インスタンスを構築し、オブジェクトで setAllocator() メソッドを呼び出して、作成されたアロケーターを設定しています。オブジェクトがスタック上に構築されている場合、アロケータは NULL に設定され、release() は delete を呼び出しません。このプロセスは非常に冗長で、エラーが発生しやすい可能性があります (メモリ リーク、setAllocator の呼び出しを忘れた場合など)。
Object* o = myPoolAllocator.allocate<Object>(constructor arguments... );
ただし、これにより、任意の数のコンストラクター引数をサポートすることが非常に困難になります。
この問題を解決する方法についてのアイデアを探しています。特にほとんどのクラスは共通のベースから派生するため、スマート ポインターに依存せずにカウント オブジェクトを参照できるというアイデアが本当に気に入っています。
ご協力いただきありがとうございます。
フロリアン