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++的类型系统,其中一些可能很困难或不可能。有没有办法强制实施这种类型使用模式?有没有办法限制给定指针类型的可用操作?像重载object
operator&
这样的事情会起作用吗?
class object {
object_pointer operator&();
};
C++中没有办法阻止指针的 C 样式转换。 任何(非函数)指针都可以转换为任何其他指针类型。
并且给定一个指针,没有办法告诉编译器"这绝对不是一个数组"。 所以你也无法阻止op[100]
。
你可以做的是隐藏类本身的所有成员,例如使用 Pimpl 习语或 C 风格的不透明结构/类。 但是,这在限制用户获取指向您的实例的指针并强制转换它们的能力方面没有帮助。
C++是成年人同意的语言。 如果您不同意,请使用其他语言。
相关文章:
- C++ 关于指针取消引用的技术问题
- 共享指针取消引用错误
- 为什么我在C++中有一个空指针取消引用
- 对指针取消引用的混淆
- 指针取消引用:无法将“节点**”转换为“节点*”
- 是否有某种功能,指针取消给出了rvalue
- 返回指针取消引用的 c++ 会导致分段错误
- cppcheck null指针取消引用:m_buffer-否则,针对null进行检查是多余的
- Cppcheck可能的空指针取消引用:
- 通过基类指针取消引用
- C++中的安全指针取消引用
- 为什么我的链表"next"指针取消引用错误的内存(XCode,C++)
- 数组访问导致空指针取消引用
- C++控制内存访问和指针取消引用
- C++指针取消引用
- C/C++ 双指针取消引用问题
- 优化器删除指针取消引用行
- C/C++ 指针取消引用的问题
- 在c++中将指针取消引用到引用中
- 指针取消引用