Если у меня есть функция, которая возвращает ссылку на экземпляр класса, который я не могу контролировать над его источником, скажем, list<int>
:
list<int>& f();
Я хочу убедиться, что его значение только присвоено другой ссылке, например ::100100
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
.