C ++控制内存访问和指针解除引用

时间:2015-02-04 00:08:14

标签: c++ pointers types

我正在用C ++编写一个API,我想限制程序员用指向API创建的对象的指针。

例如,

// API
class object {
  // details unimportant
};

// Programmer's code
object o;               // OK
object *op = &o;        // OK
long *lp = (long *)op;  // No
object o2 = op[100];    // No

据我所知,鉴于C ++的类型系统,其中一些可能很难或不可能。有没有办法来实施这种类型的使用模式?有没有办法限制给定指针类型的可用操作?重载object的{​​{1}}是否有用?

operator&

1 个答案:

答案 0 :(得分:2)

C ++中没有办法阻止C风格的指针转换。任何(非函数)指针都可以是C样式转换为任何其他指针类型。

给定一个指针,没有办法告诉编译器“这绝对不是一个数组。”所以你也无法阻止op[100]

你可以做的是隐藏班级本身的所有成员,例如使用Pimpl习语或C风格的不透明结构/类。但这对于限制用户获取指向实例的指针并投射它们的能力无济于事。

C ++是一种同意成年人的语言。如果您不同意,请使用其他语言。