2017-12-09 6 views
-4
class player{ 
    public: 
     int a; 
} 
int main(){ 
    player p1; 
    p1.a=10; 
} 

p1に新しいキーワードを使用していないため、参照変数p1を作成しましたが、ヒープ上に実際のオブジェクトは作成しませんでした。しかし、C++コンパイラでは、p1のデータメンバー 'a'に値10を割り当てることができます。ヒープ上にオブジェクトを持たないと、これはどのように可能ですか?新しいキーワードでオブジェクトを作成せずに参照上のデータメンバーを使用するにはどうすればよいですか?

+2

スコープ –

+1

のスタック上にあるので、 'new'を使ってヒープ上に作成するか、スタック上に作成することができます。それはあなたがここでやっていることです。これはjavaではありません。それについてもっと読む。 – Syntac

+0

「関連する」セクションに関連する質問がたくさんあります。 – Syntac

答えて

4

C++とJavaを混同しています。 p1は参照ではなく、自動保存期間を持つオブジェクトです。変数のスコープが始まると作成され、変数のスコープが終了すると破棄されます。

C++では、オブジェクトの存続期間をより複雑に制御する必要がある場合は、通常、「ヒープ」(正しい単語はフリーストアです)を使用します。

この特別なコントロールが必要ない場合、C++のオブジェクトは、たとえばintまたはdoubleのように動作します。あなたはnew intまたはnew doubleと書く必要があるとは思わないでしょうか? C++では、playerintまたはdoubleのようになります。ほぼすべての一般的なプログラミング言語と大きな違いがあります。

+0

おかげで、あなたは私を得た、私はC + +とJavaの間で混乱していた。そして私は質問をする前に多くの研究をしました。だから、plsはそれをdownvoteしないでください:( –

関連する問題