如果我有一个函数返回对我无法控制其源的类实例的引用,请说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
。