You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:24:54