残念ながら、これはあなたに正確な回答を与えるにはあまりにも少ない情報です。可能であれば、ポインタを削除することさえできません!
float* gf = nullptr; // global pointer (just for illustration)
void calculate()
{
float f;
gf = &f;
doSomething();
gf = nullptr;
}
いくつかのクラスの静的またはグローバル変数への質問のポイントであなたのポインタならば同じことが、適用されます。
はこのようなものを想像してみてください。
あなたは、この例のように、(通常は)非常にローカルで処理することができ、あなたは任意のより多くのそれを必要としないわかっている場合、それを削除し、ヒープ上の変数を作成した場合:
class C
{
std::vector<float>values;
C(size_t num) : values(num, 0.0f) { }
~C() { } // data deleted automatically with vector
void function()
{
for(float& f : values)
{
gf = &f;
doSomething();
}
gf = nullptr;
}
};
を
operator delete[]
への明示的な呼び出しがありませんか?さて、このベクトルは暗黙のうちに私のために処理するので、私は気にする必要はありません。生ポインタを使用することを余儀なくされたとしても、eを使用して削除を明示的に回避することができます。 g。 std::unique_ptr
...ベクタに注意してください:新しい要素をベクタに追加したり、ベクタに含まれている要素を削除すると、ポインタが無効になることがあります。
私の例では、ポインタを明示的にnullptr
に設定していますので、浮動小数点値が使用されていないかどうかを調べることができます。ハイジャック時にチェックする必要があります。マルチスレッド環境では、競合状態に対してポインタを保護する可能性があります。
私の生ポインタを 'output_tensor-> getTensorBuffer() - > data() 'にmemcpyして、生ポインタを削除することができます。 –
[this memcpy](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/tensor_util.cc#L35)と同様のものです。私のTFはAndroid CPU上で動作しています。 –
既に割り当てられている 'TensorBuffer'にあなたのデータを' memcpy() 'した場合、生のポインタを削除することができます(あなたのコードが所有者であると仮定します)。私の答えで示唆されたアプローチはあなたがコピーを避けることができます。 – mrry