2017-04-11 84 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

    感谢您的详细解释! –