2016-11-25 4 views
0

Ich war eine unwirkliche Tutorial beobachten und begegnet diese Codezeile:C++ Ist "Klassenname *" ein Klassenzeiger?

class UStaticMeshComponent* Pickup; 

Es ist eine Erklärung vor. Ich habe C++ schon eine Weile studiert und bin noch nie auf so etwas gestoßen. Ich kenne Zeiger und Referenzen, aber ich habe dieses Format nie gesehen: Klassenname *. Erstellen wir einen Klassenzeiger für eine andere Klasse? Ich habe versucht, nach Klassennamen zu suchen, gefolgt von einem *, aber das einzige Ergebnis, das angezeigt wurde, betraf Datentypen und Zeiger.

public: 
    APickUp(); 

    virtual void BeginPlay() override; 

    virtual void tick (float DeltaSeconds); 

private: 
    class UStaticMeshComponent* Pickup; 
+0

bitte keine Screenshots des Codes. Verwenden Sie Text (wie in Bildern) und formatieren Sie ihn als Code (Strg-K Verknüpfung) – bolov

Antwort

3
class UStaticMeshComponent* Pickup; 

Dies erklärt die Art class UStaticMeshComponent und erklärt auch die Variable Pickup vom Typ Zeiger auf UStaticMeshComponent. So ist der obige Code ist mehr oder weniger gleichwertig mit:

class UStaticMeshComponent; 
UStaticMeshComponent* Pickup; 

Weil Sie an dieser Stelle nicht die Definition von UStaticMeshComponent haben (nur die Deklaration) wird UStaticMeshComponent ein unvollständiger Typ betrachtet. Es gibt ein paar Dinge, die Sie mit einem unvollständigen Typ machen können. Einer von ihnen ist Zeiger auf sie zu erklären.

1

Wenn Sie nur einen Zeiger auf einen Typ verwenden, muss der Typ nicht vollständig sein. Dies funktioniert auch dann, wenn UStaticMeshComponent nicht definiert wurde. Das bedeutet, wenn dieser Header in einer Ihrer cpp-Dateien enthalten ist, sollte er etwas schneller kompiliert werden, als wenn Pickup.h den Header enthalten würde, in dem UStaticMeshComponent definiert ist.

Diese Beschleunigung kann beträchtlich sein, abhängig davon, wie groß dieser Header ist und wie oft das Include beim Kompilieren vermieden wird.

Verwandte Themen