use*_*370 2 c++ smart-pointers
是否可以将原始C++指针包装在类似智能指针的类中,这将允许用户使用熟悉的运算符(如数组和间接)进行更新:
int i;
my_ptr<int> ptr(i);
ptr[i] = 42;
Run Code Online (Sandbox Code Playgroud)
但是,绝对会拒绝用户访问底层的原始地址.所以,这不应该成功:
int *p;
p = &ptr[i];
Run Code Online (Sandbox Code Playgroud)
唉,我担心我可能会问不可能.我可以使用getter和setter方法,但我很好奇我是否可以不用.
通过代理类过滤访问权限,例如这个(不完整的示例):
template<typename T>
class proxy
{
proxy(T & v) :value_(v) {}
proxy & operator=(const T & v) { value_ = v; return *this; }
private:
T & value_;
};
Run Code Online (Sandbox Code Playgroud)
该类需要更多的工作,但一旦完成,如果你operator[]返回其中一个,它可以从a分配T,但你不能得到的地址T.
编辑
谢谢你的选票.但这个答案并不像你想象的那么好.它不允许用户执行除代理中定义的操作之外的任何其他操作.因此,例如,这不起作用:
my_ptr<int> ptr(x);
...
ptr[i]++;
Run Code Online (Sandbox Code Playgroud)
除非代理类专门针对每种类型,并且谁想要这样做?
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |