如何禁止获取对象的地址

P45*_*ent 1 c++

我正在玩一个小班Foo,正在考虑写作register Foo foo;.

我知道,为了register实际工作,你不能拿地址foo.

但是在编译时并没有强制执行.我有什么方法可以禁止服用&foo吗?

Bat*_*eba 5

如果想要禁用运算符的地址,那么你可以写

Foo* operator&() = delete;

在你的类声明中Foo.

但是这里有点或讽刺:你只能在C++ 11之后做到这一点并且register在这些标准中被弃用了!它无论如何只是一个部分解决方案:你仍然可以使用std::addressof,甚至引用 - 转换char&并获取它的地址.

在C++ 11之前,您可以声明自己的版本operator&,标记它private,而不是实现它.编译将在大多数时间失败(除非您&在类的方法中使用),并且链接时间将始终失败.但是仍然可以通过引用来避免这种情况char&.

  • 请注意,不推荐使用`register`. (4认同)