выделение памяти при переопределении оператора + в c ++ - PullRequest
0 голосов
/ 28 сентября 2011

Я создаю пользовательский объект и переопределяю оператор +. Я возвращаю новый объект того же типа. Плохо ли выделять память внутри этого метода? потому что тогда мне нужно будет удалить память из области видимости.

Ответы [ 2 ]

4 голосов
/ 28 сентября 2011

Да, без дополнительной информации, это плохо.

Обычно вы делаете:

struct X
{
     int m_i;
     X(int i) : m_i(i) {  }

     X operator+(const X& another) const
     {
         return X(m_i + another.m_i); // note, not new X(...)
     }
}

Тем не менее, вы можете вернуть unique_ptr, если вам действительно нужно динамически распределять.

2 голосов
/ 28 сентября 2011

Есть хороший пример перегрузки operator+ для возврата нового экземпляра объекта в качестве результата, без динамического выделения.

Источник здесь , с множеством объяснений о том, как перегрузить операторы.

Пример таков:

  // Add this instance's value to other, and return a new instance
  // with the result.
  const MyClass MyClass::operator+(const MyClass &other) const {
    return MyClass(*this) += other;
  }

Предполагается, что вы реализовали operator+= и конструктор копирования,если у вас нет += - просто поместите туда операции присваивания.Прочитайте ссылку для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...