Как разрешить неконстантный конструктор копирования для временных библиотек

Как разрешить классу с конструктором копирования, который принимает неконстантную ссылку, создаваться копированием из временных библиотек?

фон такой:

У меня есть функция, которая должна возвращать список указателей на объекты, все наследуемые от 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;
    }
};
0
задан pezcode 12 January 2012 в 18:26
поделиться