LINUX.ORG.RU

C++: когда вызывается деструктор?


0

0

Есть такой код:

class Value;

class MyClass {
private:
Value _value_;
mutable QMutex _mutex_;
public:
Value value() const
{
QMutexLock lock(&_mutex_);
return _value_;
}
};

При вызове value() что произойдет раньше: вызов коструктора копирования для Value или деструктора для QMutexLock? По-логике, копирование должно происходить раньше (и в GCC так и происходит), но не зависит ли этот код от компилятора?


сперва происходит construction and copy of a temporary object, потом деструкция. Честное пионерское

dilmah ★★★★★
()
Ответ на: комментарий от syomin

тут надо стандарт читать. stmt.return и class.temporary

ретурн создает временный объект и вызывает для него конструктор копии. Далее происходит собственно выход из ф-ции и деструкция локальных переменных. этот временный объект далее используется, то есть он может быть еще раз скопирован.

dilmah ★★★★★
()

В связи с RVO возможны разные варианты:

1. Копирований может быть несколько, одно до вызова ~QMutexLock, второе
после вызова ~QMutexLock;
2. Объект копируется только один раз после вызова ~QMutexLock;
3. Еще возможен вариант, когда копирование вообще отсутствует.


aton
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.