5

この質問に答えながら、私は少し混乱しました。C++ のコピー セマンティクスにより、これが正常に機能することは誰もが知っています。

int *some_obj = new int(42);
int a_copy = *some_obj;

delete some_obj;

printf("The answer is %d\n", a_copy);

しかし、これはどうですか?

int *some_obj = new int(42);
int& a_ref = *some_obj;

delete some_obj;

printf("The answer is %d\n", a_ref);

これは削除されたメモリにアクセスしていますか?

おそらくさまざまな形で何度も尋ねられましたが、これはあまり Google フレンドリーではありません。いいタイトルが作れなかった。

4

2 に答える 2

4

はい、そうです。だから、それは許可されていません。(値を変更するデストラクタを持つクラスを使用することで、違いを確認できます。)

于 2012-06-30T07:43:44.917 に答える
1

丁度。2 番目の例では、解放されたメモリにアクセスします。参照の実装はポインターです。とてもシンプルです。参照は変更できないポインタであり、アクセス演算子の表記が異なります。それらの間に他の違いはありません。

于 2012-06-30T07:49:20.480 に答える