Para evitar ese caso en particular, puede optar por tomar un puntero (ya Weep(&std::vector<int>{1,2,3})que no está permitido) o puede tomar una referencia no constante que también generará un error temporal.
Woop(const std::vector<int> *nums);
Woop(std::vector<int> *nums);
Woop(std::vector<int>& nums);
Estos todavía no garantizan que el valor siga siendo válido, pero al menos detiene el error más fácil, no crea una copia y no necesita numsser creado de una manera especial (por ejemplo, como std::shared_ptro lo std::weak_ptrhace).
std::scoped_locktomar una referencia al mutex sería un ejemplo, y uno donde ptr único / compartido / débil realmente no se desea. A menudo std::mutex, solo será un miembro básico o una variable local. Aún debe tener mucho cuidado, pero en estos casos generalmente es fácil determinar la duración de la vida.
std::weak_ptres otra opción para no ser propietario, pero luego obliga a la persona que llama a usar shared_ptr(y, por lo tanto, también a la asignación de montón), y a veces eso no es deseable.
Si una copia está bien, eso simplemente evita el problema.
Si Woopdebe tomar posesión, pase como un valor r y mueva (y evite los problemas de puntero / referencia por completo), o use unique_ptrsi no puede mover el valor en sí o si desea que el puntero siga siendo válido.
// the caller can't continue to use nums, they could however get `numbers` from Woop or such like
// or just let Woop only manipulate numbers directly.
Woop(std::vector<int> &&nums)
: numbers(std::move(nums)) {}
std::vector<int> numbers;
// while the caller looses the unique_ptr, they might still use a raw pointer, but be careful.
// Or again access numbers only via Woop as with the move construct above.
Woop(std::unique_ptr<std::vector<int>> &&nums)
: numbers(std::move(nums)) {}
std::unique_ptr<std::vector<int>> numbers;
O si se comparte la propiedad, puede usarlo shared_ptrpara todo, y se eliminará junto con la referencia final, pero esto puede hacer que el seguimiento de los ciclos de vida de los objetos se vuelva muy confuso si se usa en exceso.
std::unique_ptrpara propiedad exclusivastd::shared_ptro propiedad compartida ostd::weak_ptr, al menos, para reconocer datos perdidos).