3

たとえば、これら 2 つのコードでは、1 つはポインターを必要とせず、もう 1 つは必要とします。どうしてこれなの?myObject1 がポインターでない場合、それは正確には何ですか?

class Object{
…
};


int main(){
    // Create instance on the stack
    Object myObject1;

    // Create instance on the heap
    Object *myObject2 = new Object;

    return 0;
}

ご協力いただきありがとうございます。

4

7 に答える 7

4

クラスのインスタンス(またはオブジェクト) です。クラスのインスタンスをmyObject2 指します。

スタック上の変数を指すポインターも使用できます。

int main()
{
    Object myObject1;
    Object* pointerToObjectOnStack = &myObject1;
}

ポインタはどこでも指すことができます。スタック、ヒープ、またはグローバル変数 (スタックにもヒープにもありません)。

于 2013-04-18T11:06:17.720 に答える
1

たとえば、これら 2 つのコードでは、1 つはポインターを必要とせず、もう 1 つは必要とします。どうしてこれなの?

上に書いたコメントと一致させようとして(保証されていない)そのように書いたからです。

myObject1 がポインターでない場合、それは正確には何ですか?

アンObject。つまり、タイプのオブジェクトですObject。つまり、Objectクラスのインスタンスです。

于 2013-04-18T11:05:30.723 に答える
1

はスタックmyObject1Object割り当てられています。

ここでは、メモリに関するより正確な情報を見つけることができます。

一言で言えば:

  1. 関数のすべてのローカル変数 (オブジェクト インスタンスを含む) は、stackに割り当てられます。
  2. new(またはを使用して) 動的に割り当てられたすべてのmalloc()データは、heapに割り当てられます。
于 2013-04-18T11:06:21.740 に答える