Порядок и точка вызова деструктораC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Порядок и точка вызова деструктора

Сообщение Anonymous »

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

Например:

У меня есть такой класс:

class MutexLock
{
/* Automatic unlocking when MutexLock leaves a scope */
public:
MutexLock (Mutex &m) { M.lock(); }
~MutexLock(Mutex &m) { M.unlock(); }
};


Это очень распространенный прием, используемый для автоматического освобождения мьютекса при выходе из области видимости. Но что, если мне нужно два мьютекса в области видимости?

void *func(void *arg)
{
MutexLock m1;
MutexLock m2;

do_work();

} // m1 and m2 will get unlocked here. But in what order? m1 first or m2 first?


Это действительно не может привести к тупику. Но могут быть случаи, когда порядок освобождения ресурса может быть полезен пользователю. В этом случае важно ли быть явным, а не полагаться на деструкторы?

Кроме того, может ли в любом случае компилятор задержать уничтожение? Я имею в виду

func()

{

{
foo f();
} ---------> Can compiler choose to not destroy f here, rather do it at the time when func() is returning.
}


Подробнее здесь: https://stackoverflow.com/questions/105 ... destructor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»