在重载operator*
时,我们执行以下操作:
T & operator * () { return *ptr; }
这意味着如果我有:
SmartPtr<int> obj(new int());
*Obj = 20;
Cout << *obj;
然后*obj
部分被*ptr
替换,因此它与以下内容一样好:
*Ptr=20
cout<<*ptr
现在在重载operator->
时,我们会执行以下操作:
T * operator -> () { return ptr; }
可以访问:
Obj->myfun();
我在此不明白的是,在评估obj->
被ptr
取代后,它应该如下所示:
ptrmyfun(); // and this is syntax error
我哪里错了?
答案 0 :(得分:0)
C ++在文本编辑器中不像搜索/替换那样工作。 &#34;&obj1- GT;&#34;不是由ptr逐字替换,就好像这是文本文件中的一行文本。
使用:
Obj->myfun();
->
运算符调用返回ptr
的自定义运算符这一事实:
T * operator -> () { return ptr; }
这并不代表原始陈述不知何故变为
ptrmyfun();
好像&#34; Obj-&gt;&#34;被#34; ptr&#34;取代。 C ++根本不能以这种方式工作,比如在文本编辑器中搜索/替换。
->
运算符导致调用自定义operator->()
。那部分,你如何理解运算符重载的工作原理是正确的。
但是,简单地说,operator->
()的返回值成为实际指针取消引用所应用的实际指针值。
所以这基本上变成了:
ptr->myfun();
这就是全部。