Как разрешить создание класса с конструктором копирования, который принимает неконстантную ссылку, из временных объектов?
Фон такой:
У меня есть функция, которая должна возвращать список указателей на объекты, унаследованные от 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;
}
};