私はコードで答えようとします:
#include <queue>
#include <iostream>
int main()
{
// "Q: If I create a queue in C++..."
std::queue<int> q;
// "...add two elements to it..."
q.push(42);
q.push(1729);
// "...then call front(), store it in a regular variable (no pointer)..."
int i = q.front();
// "...Then I call pop() on the queue..."
q.pop();
// ...The variable i stored will still exist right?"
// A: "Yes, of course! And it retained its value:"
std::cout << i << std::endl;
}
さらに:
「キュー内のポインターが存在していたメモリアドレスを何かが編集するとどうなりますか?」
ポインタをキューに格納しませんでした (上記を参照)。とにかく、「ポップされた要素が格納されているキューのメモリ領域が解放または上書きされるとどうなるか」という意味であれば、答えは、そのオブジェクトのコピーを に格納し、完全に異なるメモリ領域に存在するということです。i
i
i
「それは、参照から作成されたため、以前に保存されたローカル変数が無効になったことを意味しますか?」
の戻り値を介して参照されたオブジェクトから割り当てられたにもかかわらず、そのオブジェクトのコピーfront()
を作成したためです。