2017-04-11 2 views
0

Ich bleibe stecken, wenn Sie versuchen, folgenden Code zu verstehen.C++ Brauchen Sie Hilfe für Class Declaration in Header

class V8_EXPORT Utf8Value { 
    public: 
     explicit Utf8Value(Local<v8::Value> obj); 
     ~Utf8Value(); 
     char* operator*() { return str_; } 
     const char* operator*() const { return str_; } 
     int length() const { return length_; } 
    private: 
     char* str_; 
     int length_; 

     Utf8Value(const Utf8Value&); 
     void operator=(const Utf8Value&); 
    }; 
  1. Line: "~ Utf8Value();" Wenn ich die CPP-Datei überprüft, es enthält nur eine Zeile:

    String::Utf8Value::~Utf8Value() { 
        i::DeleteArray(str_); 
    } 
    

Bedeutet es, dass die Funktion die char* str_ zu löschen ist? Gibt es einen Grund, warum eine ~ vor dem Funktionsnamen erhalten? Kann ich es in andere Namen anstelle von ~Utf8Value umbenennen?

  1. Line: const char* operator*() const { return str_; } Was es tut? Warum gibt es einen * nach Funktionsname? Mein Verständnis von const ist, dass die Funktion/Variable wird nie ändern, aber was bedeutet die zweite const nach Klammern bedeuten?

  2. Zeile: Utf8Value(const Utf8Value&); Ist es ein anderer Konstruktor wie die erste Zeile explicit Utf8Value(Local<v8::Value> obj);?

  3. Line: void operator=(const Utf8Value&); Ich habe keine Ahnung, was diese Linie zu tun versucht.

Kann mir jemand dabei helfen? Jede Hilfe würde sehr geschätzt werden! Danke !!

+1

Das sind grundlegende Fragen über Klassen. Ein Lehrbuch durchzugehen und die darin enthaltenen Probleme zu bearbeiten, wird für Sie auf lange Sicht nützlicher sein, als Antworten auf diese spezifischen Fragen zu erhalten. –

Antwort

0

Es scheint, dass Sie die C++ - Syntax nicht gut kennen, bevor Sie versuchen, einen größeren Projektquellcode zu lesen.

Um Ihre Frage:

  1. Eine Funktion Start mit ‚~‘ in Klassendeklaration (scope) ist die Zerstöre Funktion einer Klasse-Objekt, das automatisch aufrufen, wenn das Objekt sterben oder gelöscht ist. In diesem Fall wurde ein Objekt von Utf8Value (nennen wir es Objekt in der nächsten) ein str_ gehalten, das auf eine Stelle zeigt, die freigegeben werden muss, wenn der Host zerstört wird. Gib zu geben, gib zu bekommen. Schließlich können Sie es nicht umbenennen.

  2. Diese Linie erklärt ein Verhalten, wenn behandeln dieses Objekt als char * Zeichenfolge. Was es hier getan hat, rufen Sie Operatorüberschreibung in C++ auf, und der meiste Operator kann entworfen werden, was Sie wollen, wie Arithmetik, vergleichen Sie, verschieben, usw. Das ist eine sehr eigenartige Eigenschaft von C++. Für die Funktion "const" bedeutet dies, dass diese Funktion an diesem Objekt nichts ändert.

  3. Ja. Da es jedoch im privaten Bereich deklariert ist, kann es nicht außerhalb des Objekts oder eines anderen Konstruktors aufgerufen werden. Im Allgemeinen ist es entworfen, zu verbieten, ein Objekt in einer Weise zu konstruieren, die der Designer nicht will.

  4. Es funktioniert wie Frage 3 beim Versuch, ein Objekt aus Wertzuweisung zu stoppen zu konstruieren.

+0

danke für die detaillierte Erklärung !! –