C.C*_*C.C 1 c++ pointers class operator-overloading
我定义了一个类来包装原始指针,因此该指针可以自动删除。这是我的代码
#include <iostream>
class Entity
{
private:
std::string e_name;
public:
Entity():e_name("unknown"){}
void whoami() {
std::cout << e_name;
}
};
class ScopePointer
{
private:
Entity *_e;
public:
ScopePointer(Entity *e) : _e(e) {}
~ScopePointer() { delete _e; }
Entity *operator->() { return _e; }
};
int main(int argc, char *argv[])
{
ScopePointer p(new Entity());
p->whoami();
}
Run Code Online (Sandbox Code Playgroud)
它运作良好,但我完全不明白如何p->whoami();运作。我的意思是 ScopePointer 中的运算符 -> 重载应该像下面这样工作
p.operator->()->whoami();or p->->whoami();
Run Code Online (Sandbox Code Playgroud)
第一个->应该返回 Entity* ,下一个应该->返回类方法。为什么只有一个 -> 可以使其工作?
我希望 C++ 14 标准中的这段引用将有助于理解该运算符的工作原理。
C++ 14 标准(13.5.6 类成员访问,p #1)
如果 T::operator->() 存在并且该运算符被选为最佳匹配函数,则对于类型为 T 的类对象 x,表达式 x->m 被解释为 (x.operator->())->m通过重载决议机制。
所以重载运算符实际上是内置运算符->的“前缀表达式”,它提供了内置运算符中使用的指针。