是否可以禁止引用对象

时间:2012-11-05 16:17:45

标签: c++

我想做一个类noncopyable的实例,也就是说,确保特定类的实例只能作为副本传递 而不是参考。如果任何函数试图通过引用接收它,我希望它给出编译错误(理想情况下)或运行时错误。

我不认为私有operator &会这样做,有没有合法的方法来做到这一点。

2 个答案:

答案 0 :(得分:20)

那是不可能的。任何命名变量都可以绑定到相应类型的引用变量。这就是语言的运作方式。

特别是,您的限制永远不会有复制构造函数,因此您无法实际按值传递对象!

答案 1 :(得分:6)

  

我不认为制作运营商&私人会这样做,有没有合法的方式来做到这一点。

不,因为您在函数签名中用于传递引用的&不是运算符。您正在谈论运算符地址(一元)或按位运算符(二进制)。所以它与传递引用无关。

无法禁止类型的传递引用。

我怀疑你的动机是否足以做到这一点,而你似乎对传递机制的理解不足:

  

如果任何函数试图通过引用接收它,我希望它给出编译错误(理想情况下)或运行时错误。

函数通过引用或值传递参数。这是由它的声明决定的,我认为你的困惑源于此。例如:

void foo(X x);

按值获取参数x。没有办法通过引用传递它。没门。同样地:

void foo(X& x)

通过引用获取它,它总是会。