【发布时间】:2012-11-05 16:17:44
【问题描述】:
我想做与创建类noncopyable 的实例相反的事情,即确保特定类的实例可以仅作为副本而不是作为引用传递。如果任何函数试图通过引用接收它,我希望它给出编译错误(理想情况下)或运行时错误。
我不认为将 operator & 设为私有会这样做,是否有合法的方式这样做。
【问题讨论】:
-
公平的问题,但如果你想这样做,很可能表明设计不好。如果始终使用此对象,这将禁止您分解大型函数。
-
有趣的想法,但这基本上与禁止指向那种对象的指针相同,这对我来说似乎很不合理。
-
@san - 一点也不,我经常做类似
Type& t = *pointerToType;的事情来避免指针取消引用。如果传递给它的函数计划取得所有权,那么这只会颠覆意图,而对于许多函数来说,情况并非如此。 -
@san - 有趣的是,C++11 提供了一个
std::addressof函数,即使您覆盖或隐藏了&运算符,它也提供对象的地址。 -
对于特定对象,您可以通过将变量声明为
register来防止获取变量的地址。 IE。register int a; &a;是不允许的。但这对这里的要求没有帮助。
标签: c++