[英]Overloading '->' member access operator
在重载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
我要去哪里错了?
C ++不能像在文本编辑器中搜索/替换一样工作。 “ obj1->”不会被逐字记录所代替,就像这是文本文件中的一行文本一样。
附:
Obj->myfun();
->
运算符调用返回ptr
的自定义运算符的事实:
T * operator -> () { return ptr; }
这并不意味着原始的声明会以某种方式变为
ptrmyfun();
好像“ Obj->”被“ ptr”代替。 C ++根本无法以这种方式工作,就像在文本编辑器中进行搜索/替换一样。
->
运算符导致调用自定义operator->()
。 您了解操作员重载工作原理的那一部分是正确的。
但是发生的是,简单地,来自operator->
()的返回值变成了实际指针取消引用所应用于的实际指针值。
因此,这基本上变成了:
ptr->myfun();
就这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.