2017-10-31 7 views
-5

`C++の同じクラスのクラスメンバーへのポインタ[概念]?

class A{ 
public: 
    int x; 
    A* p; 
}; 

int main(){ 

    A obj1 = new A(); //no suitable constructor exists to convert from "A *" to "A" 
    A *obj2 = new A(); //Works fine 
    return 0; 
} 

`

なぜクラスAのオブジェクトは、デフォルトで、そのクラスへのポインタとして宣言されていますか?

つまり、なぜobj1は動作しませんが、* obj2は機能しますか?

+0

をさて、あなたは「'new'を使用して再。 – DimChtz

+0

'obj'はクラスAへのポインタではありません。 – Raindrop7

+1

Javaを書くときにC++を書くべきではありません。 – OznOg

答えて

2

演算子はポインタを返すので、ポインタ型の変数にのみ割り当てることができます。

A obj1 = A();は、A*ではなく、Aを返すだけで、(newのような動的メモリを割り当てずに)コンストラクタを呼び出すことができます。

1

No. Why is an object of class A declared as a pointer to that class, by default?間違っています。クラスのオブジェクトは、その型のオブジェクトであり、ポインタはありません。

キーワードnewは、ポインタに動的メモリを割り当てるために使用されます。つまり、メモリを手動でクリーンアップする必要があります。そうしないと、メモリリークが発生します。 obj上記

A* pObj = new A; // ok 
A obj = new A; // error 
A obj = *pObj; // ok: 

クラスAのインスタンスだけで、オブジェクトのアドレスは、我々は、ポインタをdereferenceそれにアクセスするようにありますポインタの内部ようPOBJは、クラスAのオブジェクトへのポインタです:

obj = *pObj = 0; // De-referencing pObj and assigning the value it points to to obj. 

が最後にクリーンアップ:

delete pObj; // ok 
delete obj; // error