Присвоение c ++ удаляет источник присвоенного значения - PullRequest
0 голосов
/ 15 января 2011

У меня есть класс (упрощенный):

class a {
  private:
    std::vector<a> arguments;
  public:
    std::vector<a> getargs() { return arguments; }
};

Предположим, класс имеет функцию-член:

void a::bubble() {
  arguments = arguments[0].getargs();
}

Является ли этот кошерный (в том смысле, что источник данных, аргументы [0], удаляется в результате выполнения команды)?

Он работает на моем компиляторе, но я просто хотел проверить, гарантирует ли стандарт c ++ безопасность этой операции.

Ответы [ 3 ]

1 голос
/ 15 января 2011

Да, все в порядке.Функция getargs () выполняется перед назначением.Он создает временный объект, который существует на весь срок действия инструкции инструкции (все для;).Это временное значение используется в вызове оператора присваивания для std :: vector (хотя и для необработанных типов).Все кошерно и будет отлично работать.

0 голосов
/ 15 января 2011

Я понятия не имею, что вы хотите сделать, но это должно работать нормально. Единственная проблема заключается в том, что вы должны быть уверены, что у вас есть хотя бы 1 элемент в аргументах.

0 голосов
/ 15 января 2011

Почему это не будет законно?Конечно, вы все равно попадете в ад этого программиста, но опять же, на самом деле это не вы, а C ++.

...