Итак, у меня был спор с другом, и какой лучший способ его решить, чем SO?Имеет ли эта часть кода утечка памяти?
Возьмем, к примеру, следующий упрощенный пример. Предположим, что все остальные функции реализованы правильно. Создает ли этот экземпляр копии утечку памяти?
Моя позиция заключается в том, что это определенно не означает. Он выделяет [rhs._size]
памяти для нового объекта, который освобождается в деструкторе, когда объект выходит из области видимости, а выделенная память для rhs
освобождается в собственном соответствующем деструкторе.
template<typename T>
class dynarray
{
private:
T* _data;
std::size_t _size;
public:
dynarray(const dynarray& rhs)
: _data(new T[rhs._size]), _size(rhs._size)
{
std::copy(rhs._data, rhs._data + rhs._size, _data);
}
~dynarray() { delete[] _data; }
};
Почему ваш друг думаю, что утечка памяти? Я не думаю, что это будет, но выглядит восприимчивым к удвоенным освобождениям из-за отсутствия оператора присваивания (просто используйте вектор). – ajshort
Так что noob на вопрос, но как вы используете этот класс? (Объявить, использовать, цель) –