Как мне разрешить, чтобы класс с конструктором копирования, который принимает неконстантную ссылку, был создан из временных объектов для копирования?
Фон выглядит так:
У меня есть функция, которая должна возвращать список указателей на объекты, которые все наследуются от Base, поэтому мне нужно что-то вроде vector<Base*>
.
Учитывая, что vector<auto_ptr>
не является чем-то особенным, я хотел написать простую оболочку вокруг vector<Base*>
, которая удаляет все элементы в своем деструкторе.
Я столкнулся со следующей проблемой:
Мой класс имеет конструктор копирования следующим образом:
auto_list(auto_list& rhs);
чтобы я мог скопировать список указателей в новый экземпляр и очистить его в старом.
Но очевидно, что это не будет работать с возвращаемыми значениями, потому что временные ссылки не привязываются к неконстантной ссылке.
Видя, что auto_ptr можно вернуть из функций, как они это реализовали?
Примечание: я не могу использовать C ++ 11 или boost, поэтому семантика перемещения или unique_ptr не являются опцией.
Если это поможет, это мой код:
template <typename T> class auto_list
{
private:
vector<T*> pointers;
public:
auto_list(vector<T*>& pointers)
{
this->pointers = pointers;
}
auto_list(auto_list& rhs)
{
this->pointers = rhs.pointers;
rhs.pointers.clear();
}
~auto_list()
{
for(typename vector<T*>::const_iterator it = this->pointers.begin(); it != this->pointers.end(); it++)
{
delete (*it);
}
}
auto_list& operator=(auto_list& rhs)
{
this->pointers = rhs.pointers;
rhs.pointers.clear();
}
vector<T*> get_pointers() const
{
return this->pointers;
}
};