gpt4 book ai didi

c++ - C++ 智能指针可以完全封装它的数据吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:56 25 4
gpt4 key购买 nike

是否可以将原始 C++ 指针包装在类似智能指针的类中,这将允许用户使用熟悉的运算符(例如数组和间接寻址)进行更新:

int i;
my_ptr<int> ptr(i);
ptr[i] = 42;

然而,将绝对拒绝该用户访问底层原始地址。所以,这不应该成功:

int *p;
p = &ptr[i];

唉,恐怕我问的可能是不可能的。我可以使用 getter 和 setter 方法,但我很好奇我是否可以不用。

最佳答案

通过代理类过滤访问,比如这个(不完整的例子):

template<typename T>
class proxy
{
proxy(T & v) :value_(v) {}
proxy & operator=(const T & v) { value_ = v; return *this; }
private:
T & value_;
};

该类需要更多工作,但一旦完成,如果您的 operator[] 返回其中之一,它可以从 T 分配给它,但您可以'获取 T 的地址。

编辑

感谢大家的投票。但这个答案并不像你想象的那么好。它不允许用户执行除代理中定义的操作之外的任何其他操作。因此,例如,这是行不通的:

my_ptr<int> ptr(x);
...
ptr[i]++;

除非代理类专门针对每种类型,否则谁愿意这样做?

关于c++ - C++ 智能指针可以完全封装它的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5362189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com