今C++について勉強中なのですが、
「delete後のポインタ」について
調べても回答が得られない疑問があり、皆さんに質問した次第です。
私が調べたことが正しいのかについても皆さんにお聞きしたいと思っております。
なので長文になっていますがお答えいただけると幸いです。
//調べたこと
私なりに本やネットで
メモリの動的確保と解放について調べたのですが、
結果として
delete後のポインタに対して、
①値を入れる。
②もう一度deleteする。
これらは定義がないので、
予期せぬ動作を引き起こしてしまう。
delete後のポインタには、「0」か「NULL」か「nullptr」を入れることが望ましい。
それらの値を持つポインタに対してdeleteは、「何もしない」という定義があるので、
予期せぬ動作を起こすことはない。
また0、NULLのようにマクロに定義されているものではなくnullptrを使うのが厳密な
動作のために良い。
ということがわかりました。
しかし、nullptrとなったポインタの再使用についてがわかりませんでした。
//質問
プログラム例
~省略~
delete p ; //pはint型のポインタ
p = nullptr ;
このように delete後のポインタpをnullptrとした。として、
その後「p=new int;」やあるいは「p=&a;」等での再使用は問題なく行えるのでしょうか。
それとも一度、破棄されたポインタはどんな形にしたとしても使うと予期せぬ問題を起こしう
るのでしょうか。
私は問題なく使えるだろうと考えて、下に示すような簡単なプログラムを作り、何度か動作さ
せましたが、問題なく動作しました。
しかし、私の力では十分な実験が行えないですし、破棄というものに関しては、間違えばプロ
グラムに深刻な問題を与えるということなので、皆さんの意見を聞いておきたいのです。
回答よろしくお願いいたします。
#include<iostream>
using namespace std;
int main() {
int* p; p = new int; *p = 50; cout << *p << endl; delete p; p = nullptr; p = new int; *p = 100; cout << *p << endl;
}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/28 09:42