如果我有一个返回一个类的实例引用的函数,但是这个类的源代码不在我的控制范围内,比如说list<int>
:
list<int>& f();
我希望确保它的值仅分配给另一个引用,例如:
list<int> &a_list = f();
如果用户改为执行以下操作:
list<int> a_list = f(); // note: no '&', so the list is copied
我希望它成为编译时错误,因为用户只会操作列表的副本而不是原始列表(这从来不是我的应用程序想要的结果)。
有没有办法防止上述情况中的复制构造和赋值(比如通过某种“包装器”类)?
理想情况下,如果使用某个包装器类,比如wrapper<T>
,我希望它适用于任何类型的对象T
。
是的,我知道对于我可以控制的类,我可以简单地将复制构造函数和赋值运算符设置为private
,例如:
class MyClass {
public:
// ...
private:
MyClass( MyClass const& );
MyClass operator=( MyClass const& );
};
禁止复制构造函数和赋值操作符;但是,如上所示,我想对于例如std::list
这样的情况进行此操作,而我不能简单地将复制构造函数和赋值操作符设置为private
。
x += 1
的情况下误写成x + 1
的方法。这会带来很多痛苦,而不是试图“拯救”你,而是“你需要理解引用”。 - GManNickG