1

boost :: python::objectタイプのオブジェクトを動的に割り当てるのが正しいかどうか疑問に思いました。

boost::python::object * obj = new boost::python::object();

問題がありますか?内部参照カウントはどうですか?

ありがとう!

4

1 に答える 1

2

boost :: python :: objectのドキュメントには、デストラクタが参照カウントをデクリメントし、代入演算子がそれをインクリメントすることが明示的に記載されています。明示的には述べられていませんが、これらの明示的なステートメントとコンストラクターに関するこのステートメントからConstructs an object managing a reference、コンストラクターも参照カウントをインクリメントすると推測できます。

newはコンストラクタを呼び出すため、デストラクタが確実に呼び出されるようにポインタでdeleteが呼び出される限り、内部参照カウントに問題はありません。

また、参照カウントにstd::shared_ptrまたはstd::unique_ptrを使用することについてのコメントは多少誤解を招く可能性があることに注意してください。std :: unique_ptrはカウントを参照しませんが、移動/移動の割り当てにより、所有権がインスタンスAからインスタンスBに渡され、インスタンスAが無効になります。さらに、std :: shared_ptrは、boost :: python :: objectが維持する内部参照カウントを変更しませんが、boost :: python::objectポインターの存続期間に関する個別の参照カウントを管理します。

于 2012-11-17T20:10:16.293 に答える