Time t (12, 0, 0); t.GetTime();
Time* t = new Time(12, 0, 0); t->GetTime();
new キーワードなしで作成されたオブジェクトと new キーワードを使用して作成されたオブジェクトを使用してメソッドを呼び出すこの正しい方法はありますか??? ありがとう..
Time t (12, 0, 0); t.GetTime();
Time* t = new Time(12, 0, 0); t->GetTime();
new キーワードなしで作成されたオブジェクトと new キーワードを使用して作成されたオブジェクトを使用してメソッドを呼び出すこの正しい方法はありますか??? ありがとう..
抜粋 1
Time t (12, 0, 0);
t
は type の構造体またはクラスであるため、参照による要素選択と呼ばれる演算子Time
を使用してそのメンバーにアクセスします。.
t.GetTime();
抜粋 2
Time* t = new Time(12, 0, 0);
ここでt
は and へのポインタTime
であるため、最初にポインタを逆参照してから、.
前のように演算子を使用できます。
(*t).GetTime();
または、ポインター演算子による要素選択を使用する、使用したショートカットの方法->
:
t->GetTime();
Armin が正しく指摘しているように、使用する必要がある要素アクセスの形式は、要素へのアクセスに使用する変数の型によって決まります。オブジェクトの作成方法によって決定されるわけではありません。例えば:
Time t1 (12, 0, 0);
Time *t2 = &t1;
t1.GetTime();
t2->GetTime();
(&t1)->GetTime();
(*t2).GetTime();
2 つの違いは、1 つ目はスタックにメモリを割り当て、2 つ目はヒープにメモリを割り当てることです。
Time t (12, 0, 0); //t is an object on the stack
Time* t = new Time(12, 0, 0);//t is a pointer to an object on the heap
2 番目の方法を使用するには、次の呼び出しが必要であることに注意してください。
delete t;
使い終わったら。
その中に Time クラスと GetTime 関数があると仮定すると、それは正しいですが、自動的に削除されないため、2 つ目のメモリは delete t で解放する必要があります。