のメカニズム、以下のコードを確認してください。私が誤ってC++でこの問題を見つけましたが、完全にそれが起こったかわからなかったのshared_ptr
int main() {
int *aptr = new int(20); //Declare an integer space with 20, and aptr points to it
shared_ptr<int> a(aptr); //Declare a shared_ptr to points where aptr points
stringstream ss;
ss << a;
const char *chstr = ss.str().c_str(); // Save the address as string
void *address;
sscanf(chstr, "%p", (void **)&address); // Convert string back to pointer
a = NULL; // Free the shared pointer
cout << *reinterpret_cast<int*>(address) << endl; // Output: 0, 20 has gone
return 0;
}
は、アドレスがされている理由を誰が私が言うことができるです解放された?
私は元の整数ポインタ "aptr"を操作しませんでしたが、何とかshared_ptrのためにスペースが消えましたか?
どのように起こったのか知りたいです、ありがとうございました!
あなたはあなたの足を撃って、「何かが間違っているのはなぜですか?」と尋ねます。まず、一時的な文字列のアドレスを保存します。これは本当に悪いことです。第二に、resetを呼び出すのではなく、shared_ptrにNULLを代入します。 – ForEveR
私はあなたが達成しようとしているか、あなたが求めていることを本当に知りません。私はあなたがポインタと彼らが指しているものとの違いをよりよく理解する必要があると思います。 –
.... a = NULL; nullpointer –