Я предполагаю, что там есть какой-то ответ, но я не мог найти его, потому что есть много вопросов, связанных с потоками, и мой довольно простой по сравнению.
Я не пытаюсь создать потоковый экземпляр или конструктор присваивания или что-то в этом роде.
Что мне интересно, если у меня есть класс, который представляет блокировку мьютекса, и я возвращаюсь из функции, которая его запускает, что происходит сначала, деструктор моего мьютекса (таким образом его отпирает) или конструктор копирования возвращаемое значение. Вот мой пример:
string blah::get_data(void)
{
MutexLock ml(shared_somewhere_else); // so this locks two threads from calling get_data at the same time
string x = "return data";
return x;
}
Где-то в другом месте мы вызываем get_data...
string result = get_data();
Возвращаясь к C на секунду, вы никогда не возвращаете указатель на глобальную переменную, так как локальная переменная выходит за пределы области после возврата.
У С++ нет этой проблемы, потому что x будет скопирован в результат. Мне интересно, когда это произойдет. Будет ли мой замок свободен до того, как будет сделана копия?
В этом простом примере "возвращаемые данные" - это статическая информация, но с которой я работаю, это данные, которые могут быть изменены другим потоком (также заблокированным на одном MutexLock), поэтому, если блокировка освобождается до копирования -результат, копия может быть повреждена.
Я не уверен, что хорошо объясняю этот вопрос, поэтому я попытаюсь уточнить, не имеет ли это смысла.