1

C++ でメモリから何かを削除することと、もはや存在するものと存在しないものについて質問があります。C++ (標準ライブラリ) でキューを作成する場合、それに 2 つの要素を追加してから、front() を呼び出し、通常の変数 (ポインターなし) に格納します。次に、キューで pop() を呼び出します。私が保存した変数はまだ存在しますよね?キュー内のポインターが存在していたメモリアドレスを何かが編集するとどうなりますか? それは、参照から作成されたため、以前に保存したローカル変数が無効になったことを意味しますか?

明確にしていただきありがとうございます。

4

3 に答える 3

2

私はコードで答えようとします:

#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;
}

さらに:

「キュー内のポインターが存在していたメモリアドレスを何かが編集するとどうなりますか?」

ポインタをキューに格納しませんでした (上記を参照)。とにかく、「ポップされた要素が格納されているキューのメモリ領域が解放または上書きされるとどうなるか」という意味であれば、答えは、そのオブジェクトのコピーを に格納し、完全に異なるメモリ領域に存在するということです。ii

i「それは、参照から作成されたため、以前に保存されたローカル変数が無効になったことを意味しますか?」

の戻り値を介して参照されたオブジェクトから割り当てられたにもかかわらず、そのオブジェクトのコピーfront()を作成したためです。

于 2013-04-08T22:52:44.700 に答える