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