我正在玩一个小班Foo
而正考虑写register Foo foo;
。
我知道要register
实际工作,您不能使用foo
的地址。
但是在编译时没有强制执行。我有什么方法可以禁止&foo
?
答案 0 :(得分:5)
如果要禁用运营商的地址,则可以编写
Foo* operator&() = delete;
在Foo
的课程声明中。
但这里有一点或者讽刺:你只能在C ++ 11之后做到这一点,register
在那些标准中被弃用了!无论如何,这只是一个部分解决方案:您仍然可以使用std::addressof
,甚至引用 - 转换为char&
并获取该地址。
在C ++ 11之前,您可以声明自己的operator&
版本,将其标记为private
,不来实现它。编译将在大多数时间失败(除非您在类的方法中使用&
),并且链接时间将始终失败。但是,使用char&
的参考演员仍然可以避免这种情况。