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

C++ controlling memory access and pointer dereferencing

我正在用 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++ 的类型系统,其中一些可能很难或不可能。有没有办法强制执行这种类型的使用模式?有没有办法限制给定指针类型的可用操作?像重载 objectoperator& 这样的东西会起作用吗?

class object {
  object_pointer operator&();
};

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

并且给定一个指针,没有办法告诉编译器"This is definitely not an array."所以你也无法阻止op[100]

你可以做的是隐藏 class 本身的所有成员,例如使用 Pimpl 习惯用法或 C 风格的不透明 structures/classes。但这在限制用户获取指向您的实例的指针和转换它们的能力方面对您没有帮助。

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