2016-06-23 11 views
1

Dies ist mein „Code“:Wie man einen Haufen initialisieren im Konstruktor zugewiesen varible

class a{ 
    int *var=new int; 
public: 
    a(int i):*var(5){}; 
    ~a(){} 
}; 

Jetzt natürlich das funktioniert nicht. Wie kann ich eine Heap-Variable aus dem Konstruktor initialisieren? (Ich will nicht das Heap-Variable in dem Konstruktor zuzuteilen)

+0

Warum haben Sie einen Parameter 'a' genannt zum Konstruktor? Erstens wird es nicht benutzt, zweitens ist es eine schlechte Idee, es genauso zu nennen wie die Klasse. Warum wollen Sie die Heap-Variable nicht im Konstruktor zuweisen? – skyking

Antwort

4

Wie so:

class a{ 
    int *var; 
public: 
    a(int a):var(new int(5)){}; 
    ~a() 
    { 
     delete var; 
    } 
} 

Die Speicherzuweisung muss im Konstruktor geschehen. Außerdem müssen Sie sicherstellen, dass Sie die Zuordnung im Destruktor aufgehoben haben.

Beachten Sie, dass Ihr Parameter a für den Konstruktor nicht verwendet wird. Wenn Sie diesen Wert zum Initialisieren Ihrer Klassenvariablen a meinen, sollten Sie Ihren Zuweisungsaufruf auf new var(a) ändern.

Anmerkung 2: Wenn Sie nicht speziell Speicher manuell verwalten müssen (sagen für eine Übung), ein besseres Design intelligenten Zeiger, wie zu benutzen ist:

class a{ 
    std::unique_ptr<int> var; 
public: 
    a(int a): var(std::make_unique<int>(5)){}; 
    ~a() 
    {} 
} 
+0

Danke, es ist Arbeit –

+0

@AnatolyS - das sollte wirklich ein Kommentar gewesen sein, nicht eine Bearbeitung. – Smeeheey

+0

@Smeehey: ok, aber wenn du dich entscheidest, std :: unique_ptr zu zeigen, solltest du einen bevorzugten Weg zeigen, einen zu konstruieren. – AnatolyS

Verwandte Themen