C++ 如何禁止获取对象的地址
我在玩一个小班的C++ 如何禁止获取对象的地址,c++,C++,我在玩一个小班的Foo,正在考虑写register Foo-Foo 我知道,要使register真正起作用,您不能使用foo的地址 但这并没有在编译时强制执行。有什么方法可以禁止使用&foo?如果要禁用操作员的地址,您可以写 Foo*运算符&()=delete 在您的类中声明Foo 但这里有一点讽刺:您只能在C++11以后的版本中这样做,register在这些标准中被弃用!无论如何,这只是部分解决方案:您仍然可以使用std::addressof,甚至可以引用cast到char&并获取该地址 在C
Foo
,正在考虑写register Foo-Foo代码>
我知道,要使register
真正起作用,您不能使用foo
的地址
但这并没有在编译时强制执行。有什么方法可以禁止使用&foo
?如果要禁用操作员的地址,您可以写
Foo*运算符&()=delete代码>
在您的类中声明Foo
但这里有一点讽刺:您只能在C++11以后的版本中这样做,register
在这些标准中被弃用!无论如何,这只是部分解决方案:您仍然可以使用std::addressof
,甚至可以引用cast到char&
并获取该地址
在C++11之前,您可以声明自己版本的操作符&
,将其标记为私有
,而不实现它。编译在大多数情况下都会失败(除非在类的方法中使用&
),链接时间总是会失败。但是这仍然可以通过引用转换到char&
来避免,如果要禁用运算符的地址,则可以编写
Foo*运算符&()=delete代码>
在您的类中声明Foo
但这里有一点讽刺:您只能在C++11以后的版本中这样做,register
在这些标准中被弃用!无论如何,这只是部分解决方案:您仍然可以使用std::addressof
,甚至可以引用cast到char&
并获取该地址
在C++11之前,您可以声明自己版本的操作符&
,将其标记为私有
,而不实现它。编译在大多数情况下都会失败(除非在类的方法中使用&
),链接时间总是会失败。但这仍然可以通过引用转换为char&
来避免。请注意,register
已被弃用。这是一个很好的观点。我试图在这里挽回一些尊严。我会澄清这里的措辞,说“声明它是私有的,然后不实施它。”它目前的写法意味着实施。@AndyG:谢谢,所以现在我的评论也适用于您。您还需要专门为类指定std::addressof。请注意,register
已弃用。Ha。这是一个很好的观点。我试图在这里挽回一些尊严。我会说“声明它是私有的,然后不实现它。”来澄清这里的措辞。它当前的编写方式意味着一个实现。@AndyG:谢谢你,所以我的评论也适用于你。你也会想专门为这个类编写std::addressof。