引数の1つを保持する関数を持っている場合、その関数をBoost.Pythonで公開するときに使用するコールポリシーがありますか?Boost.Python:引数を取る
void func(MyClass* obj)
{
// Code that takes possession of `obj`
}
引数の1つを保持する関数を持っている場合、その関数をBoost.Pythonで公開するときに使用するコールポリシーがありますか?Boost.Python:引数を取る
void func(MyClass* obj)
{
// Code that takes possession of `obj`
}
boost::weak_ptr
と思っています。
using boost::shared_ptr;
using boost::weak_ptr;
func (weak_ptr<MyClass> wp)
{
shared_ptr<MyClass> sp = wp.lock();
if (sp)
// sp stays alive until it goes out of scope or is reset
}
基本的に、これはboost::weak_ptr
のドキュメントで提供されている例です。 こちらはです。
関数が 'shared_ptr'を受け取った場合、関数は同じ働きをします:関数が返る前にオブジェクトが削除されないようにします。そして、あなたはロッキングコードを保存します。違いは何でしょうか? – eudoxos
もし私が正しくそれを得たならば、 'weak_ptr' + lockingを使わないと、あなたの' shared_ptr'が指し示すオブジェクトで誰も回っていないことを確かめることができません。 'shared_ptr'を使って作成した' shared_ptr'は、ロック時に 'weak_ptr'が指し示したオブジェクトを指し、' shared_ptr'がスコープから外れるまでオブジェクトが存続することを保証します。 – Jir
[docs](http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/weak_ptr.htm)を参照してください。 'weak_ptr'は、削除しようとすることなく(おそらく)後で使用される共有オブジェクトへのポインタを保持するのに便利です。ここで 'weak_ptr'を取得し、直ちに' shared_ptr'に 'lock()'で変換します、目的は何ですか? – eudoxos
私は疑問を持っているかどうかはわかりませんが、他の関数が渡されたオブジェクトを変更するのではないかと心配していますか?もしそうなら(もしあなたがその関数を変更できるならば)、 'boost :: weak_ptr'が必要なものかもしれません。 – Jir
「持ち帰る」とはどういう意味ですか? –
と同じように、それを削除したいかもしれません。または、それをどこかに保存しておき、ある時点でそれを削除することもできます。 –