2つのポインタが同じオブジェクトを指していて、ポインタ1を使用してポインタを削除しても、メモリに残っていてポインタ2がnullを指すか、それを解放するためにポインタ2を削除する必要がありますか?C++ 2同じオブジェクトへのポインタ
私は意味:
int *p1, *p2;
p1=new int;
p2=p1;
*p1=5;
p2=p1;
delete p1;
int x=*p2;
//Error or x=5?
2つのポインタが同じオブジェクトを指していて、ポインタ1を使用してポインタを削除しても、メモリに残っていてポインタ2がnullを指すか、それを解放するためにポインタ2を削除する必要がありますか?C++ 2同じオブジェクトへのポインタ
私は意味:
int *p1, *p2;
p1=new int;
p2=p1;
*p1=5;
p2=p1;
delete p1;
int x=*p2;
//Error or x=5?
1 - まあ、UB、ない "エラー" 自体。しかし、しないでください。
Thanx、ちょうど私が知りたいと思ったもの:) –
2つのポインタが同じメモリを指していないのが一般的です。それはあなたが1つを削除すると、もう1つはぶら下がりポインタになるからです。
メモリを削除した後に行う操作はすべて、未定義の動作です。
メモリがp2
に指定されているので、を忘れてしまったと思いますが、ご質問のとおり、int x=*p2;
は未定義です。
メモリはまだありますが、オブジェクトはありません。 –
@LightnessRacesinOrbit私は彼が私のポイントを得たことを願っています(私はあなたがしたことを知っています)。明らかにあなたのRAMはどこにも行くつもりはありません:) –
私はそれが現場でビームアウトできると思います –
「p2」には何も割り当てません。 – sth
あなたの例では、p2に値を与えないので、p1と同じではありません!それ以外は、軌道のライトネスレースがスポットライトです。ああ、しかし、コードの質問:エラーが発生するか、エラーが発生しない可能性があります。それはUBです。 –
@ Mr Resister:それは習慣です;) –