私はvoid *にデータをキャストする必要があるlibevを使用しています。これはあらかじめ定義された構造体に準拠しています。 boost :: shared_ptrをvoid *にキャストし、void *をboost :: shared_ptrにキャストする必要があります。ここに私のコードはshared_ptrをvoidにキャストする*
void foo(boost::shared_ptr<string>& a_string)
{
void* data = (void*)a_string.get();
boost::shared_ptr<string> myString((string*)data);
}
が、私はこれが正常に動作しますかなり確信していることを行うことです、しかし方法が私のコードは、私は私の文字列にすべてのshared_ptrの参照が増加しない、この鋳造方法として、スコープの外に行くと信じてセットアップがありますuse_countとshared_ptrはまだ必要な間にメモリを解放しています。
use_countを手動で増減する方法はありますか?理想的には、void *にキャストするときにuse_countをインクリメントし、別の関数にvoid *を渡し、void *をshared_ptrにキャストしてuse_countを減らします。
誰かがこの問題に対する別の解決策を知っていれば、私は助けを使うことができます。
ウォッチャーと 'shared_ptr'の両方を含むクラスにウォッチャーを格納することができます。これにより、ウォッチャーの存続期間が、 'shared_ptr'が所有するオブジェクトの存続期間に一致するか、それを超えることが保証されます。また、pointed-toオブジェクトのアドレスを格納するのではなく、 'shared_ptr'自体のアドレスを格納しないのはなぜですか? – Mankarse
私はshared_ptrを含む構造体を作成し、構造体をvoid *にキャストすることでハックを発見しました。どのように私はこの解決策についてまだ感じるか分からない。また、どこかのフォーラムでshared_ptrのアドレスを使用しないでください。 –
@ user1229962:あなたは 'void * 'を何に渡していますか? –