C++控制内存访问和指针取消引用

C++ controlling memory access and pointer dereferencing

本文关键字:指针 取消 引用 访问 控制 内存 C++      更新时间:2023-10-16

我正在用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 operator&这样的事情会起作用吗?

class object {
  object_pointer operator&();
};

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

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

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

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