ファクトリを使用して作成および削除されたオブジェクトをPythonで表示できるようにしようとしています。
オブジェクトにはプライベートコンストラクタとデストラクタがあり、ファクトリの有効期間は作成するオブジェクトよりも大きくする必要があります。
次のコードがそれを行う必要があるようです:
class_<Factory>("Factory")
.def("CreateObject", &Factory::CreateObject,
return_internal_reference<1, return_value_policy<manage_new_object>>());
class_<Object, boost::noncopyable>("Object", no_init);
そして、私が知る限り、コンパイラやランタイムのエラーは発生しません。
問題は、ブーストがオブジェクトを破壊する方法をどのように知っているかです。破棄する必要があるよう
に指定しましたが、プライベートであるためデストラクタを呼び出すことができず、ファクトリ破棄メソッドの名前を指定していません。
どうすれば指定できますか?別のものを追加することはできますが、それはPythonコードがオブジェクトの破壊を処理する必要があり、ぶら下がっているオブジェクトを持つ可能性があることを意味します。
私がやりたいのは、このオブジェクトの参照カウントが0に達したときに、自動的に呼び出されるか、引数としてオブジェクトのみを指定した静的関数でさえ呼び出されることです(ファクトリはオブジェクトから回復できます)。manage_new_object
def
Factory
factory.DestroyObject(object)