如何禁止获取对象的地址

时间:2016-02-02 11:28:24

标签: c++

我正在玩一个小班Foo而正考虑写register Foo foo;

我知道要register实际工作,您不能使用foo的地址。

但是在编译时没有强制执行。我有什么方法可以禁止&foo

1 个答案:

答案 0 :(得分:5)

如果要禁用运营商的地址,则可以编写

Foo* operator&() = delete;

Foo的课程声明中。

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

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