2009-03-24 18 views

risposta

36

Il secondo è sbagliato!

È possibile utilizzare

MyClass object; 

che funzionerà.

Ora, riguardo a come scegliere tra queste due possibilità, dipende principalmente da quanto tempo il tuo oggetto dovrebbe vivere. Vedi there per una risposta esauriente.

8

L'operatore new restituisce un puntatore all'oggetto che crea, pertanto l'espressione Myclass object = new Myclass(); non è valida.

In altri linguaggi non sono presenti puntatori espliciti come il C++, quindi è possibile scrivere istruzioni come Myclass object = new Myclass();, ma in C++ ciò non è possibile. Il tipo restituito di new Myclass(); è un puntatore a un oggetto Myclass, ad esempio Myclass *.

7

Il primo esempio crea un puntatore a MyClass e lo inizializza in modo che punti al risultato del nuovo operatore.

Il secondo probabilmente non verrà compilato, poiché sta tentando di creare un oggetto MyClass e assegnarlo a un puntatore MyClass. Questo potrebbe funzionare nell'improbabile caso in cui tu abbia un costruttore MyClass che accetta un puntatore MyClass.

3

Il primo è corretto.

Il secondo in genere non viene compilato. E se lo fa, la classe sta facendo alcune cose complicate in un costruttore di costruttori/assegnatari. E probabilmente sta perdendo memoria.

53
Myclass *object = new Myclass(); //object is on the heap 
Myclass object; //object is on the stack 

si creano oggetti sul mucchio, se si pensa di utilizzare loro per tutta un lungo periodo di tempo e si creano oggetti sullo stack per un breve corso della vita (o entità).

6

La prima riga di codice è corretta mentre la seconda riga di codice non è corretta.

Myclass object=new Myclass(); //Incorrect code 

Sopra codice non è corretto come nuova Myclass(); restituisce il puntatore alla classe e Oggetto Myclass; dichiara oggetto di classe e si sta tentando di assegnare il puntatore alla classe all'oggetto di classe, che non è corretto.

La prima riga di codice è corretta. Ma questo dichiara il puntatore alla classe e non l'oggetto della classe.

Myclass *object = new Myclass(); //declares pointer to class. 

Per dichiarare l'oggetto della classe è necessario scrivere il seguente codice.

Myclass object; //declares object of class Myclass 

Ma si dovrebbe notare che il modo di accedere a membro della classe utilizzando il puntatore alla classe e l'utilizzo di oggetto della classe sono diversi. di seguito è riportato il codice per l'accesso ai membri della classe.

10

La prima riga è corretta al 100%. Sfortunatamente, non puoi creare oggetti con la tua seconda linea in C++. Ci sono due modi per creare/creare un oggetto in C++.

Il primo è:

MyClass myclass; // if you only need to call the default constructor  
MyClass myclass(12); // if you need to call constructor with parameters* 

secondo è:

MyClass *myclass = new MyClass();// if you only need to call the default constructor 
MyClass *myclass = new MyClass(12);// if you need to call constructor with parameters 

in C++, se si utilizza la parola chiave new, oggetto verrà memorizzato nel mucchio. È molto utile se si utilizza questo oggetto per un lungo periodo di tempo e se si utilizza il primo metodo, esso verrà memorizzato nello stack. può essere utilizzato solo per un breve periodo di tempo. Avviso: se si utilizza la parola chiave new, ricordare che restituirà il valore del puntatore. Dovresti dichiarare il nome con *. Se si utilizza il secondo metodo, non elimina l'oggetto nell'heap. È necessario eliminare da soli utilizzando delete parola chiave:

delete myclass; 
Problemi correlati