2017-04-11 55 views
0

當試圖理解下面的代碼時,我陷入困境。C++在頭文件中需要類聲明的幫助

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. 行: 「〜Utf8Value();」 當我檢查cpp文件,它包含了只有一行:

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

這是否意味着該功能是刪除char* str_?爲什麼在函數名稱前加上~是否有任何理由?我可以將其重命名爲其他名稱而不是~Utf8Value

  • 線:const char* operator*() const { return str_; } 它有什麼作用?爲什麼函數名稱後有一個*? 我對const的理解是,fucntion /變量永遠不會改變,但括號後的第二個const是什麼意思?

  • 行:Utf8Value(const Utf8Value&); 它是另一種構造函數,像第一行explicit Utf8Value(Local<v8::Value> obj);

  • 行:void operator=(const Utf8Value&); 我不知道這一行試圖做什麼。

  • 任何人都可以幫助我嗎?任何幫助將非常感激! 謝謝!

    +1

    這些是關於類的基本問題。閱讀一本教科書並解決其中的問題,從長遠來看,對你而言,比對這些具體問題的答案更有用。 –

    回答

    0

    在嘗試讀取一些更大的項目源代碼之前,似乎您並不知道C++語法。

    你的問題:

    1. 的函數開始用「〜」在類聲明(範圍)是一類對象,當對象是死或刪除其中自動調用的Destroy功能。在這種情況下,Utf8Value的一個對象(讓我們在下面稱它爲對象)一直持有str_指向需要在主機被銷燬時釋放的地方。得到,給予得到。最後,你不能重命名它。

    2. 此行聲明一個行爲時將此對象視爲char *字符串。它在這裏調用了C++中的操作符重寫,大多數操作符可以被設計爲你想要的,比如算術,比較,移位等等。這是C++的一個非常奇特的特性。對於'const'函數,這意味着這個函數不會改變這個對象中的某些東西。

    3. 是的。但是由於它是在私有範圍內聲明的,所以不能從對象或其他構造函數中調用它。一般來說,它旨在禁止以設計師不想要的方式構建對象。

    4. 它在嘗試停止從賦值中構造對象時工作方式與問題3相同。

    +0

    感謝您的詳細解釋! –