如何为C++自定义UniquePtr类实现operator->运算符?
实现UniquePtr的operator->运算符
要搞清楚operator->的返回类型,得先明白C++对这个运算符的特殊处理规则:当你重载operator->后,编译器会自动链式调用它,直到拿到一个原生指针,然后用这个指针去访问成员。也就是说,uniquePtr->member会被编译器转换成(uniquePtr.operator->())->member,而非手动去模拟(*uniquePtr).member的逻辑。
基于这个规则,operator->的返回类型和实现应该这样写:
非const版本
T* operator->() { return ptr; }
这个版本对应非const的UniquePtr对象,返回可修改的原生指针T*,保证通过->能修改指向对象的成员,和你已经实现的非const版operator*返回T&的行为保持一致。
const版本
const T* operator->() const { return ptr; }
这个版本对应const的UniquePtr对象,返回const T*,确保无法通过这个指针修改指向的对象,和const版operator*返回const T&的行为匹配。
把这两个函数补到你的UniquePtr类中后,完整的相关部分就变成:
T& operator*(); const T& operator*() const; T* operator->() { return ptr; } const T* operator->() const { return ptr; } ~UniquePtr();
简单来说,operator->只需要返回你持有的原生指针即可,剩下的成员访问逻辑会由编译器自动完成,不需要手动做解引用操作。
内容的提问来源于stack exchange,提问作者user25687822
相关产品推荐
相关产品推荐

