Рассмотрим приведенный ниже пример, где я создаю локальную переменную specialNumber
в main()
и передаю ее по ссылке на новый поток, а также на другую функцию (не обращайте внимания на отсутствие блокировки / мьютекса):
#include <iostream>
#include <thread>
void threadRun(int& number) {
while(true) {
std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << number << std::endl;
number += 1;
}
}
int main() {
int specialNumber = 5;
std::thread newThread(threadRun, std::ref(specialNumber));
otherFunction(specialNumber);
newThread.join();
}
void otherFunction(int& number) {
// does something with number
}
Я знаю, что вообще следует избегать передачи ссылок на локальные переменные, так как после завершения функции переменная выйдет из области видимости, и ссылка станет недействительной.
Однако, поскольку переменная является локальной для main()
, и эта функция не завершится, пока не завершится вся программа, есть ли что-то не так с этой практикой?
Мой конкретный c сценарий использования будет хранить здесь небольшой объект (в основном состоящий из указателей для кучи объектов вместе с вспомогательными функциями), который будет использоваться несколькими потоками и / или функциями, и передаваться по кругу. ссылка на это. Я знаю, что альтернативой является хранение его в куче с помощью умного указателя, такого как shared_ptr
, но хранение такого маленького объекта таким способом мне кажется неэффективным.
Я прошу прощения, если какая-либо из моих терминов неверна Я довольно новичок в C ++. Пожалуйста, поправьте меня!