В С++ гарантируется, что возвращаемое значение будет создано до того, как будут уничтожены автоматические переменные в функции? Уведомление Корзина:: получить:
class Basket
{
public:
// Gift is a struct containing safely copyable things like int or string
Gift gift;
// Used to protect access and changes to gift
Mutex mutex;
// Copy gift into present, while locked to be thread safe
void put (const Gift & gift)
{
Lock lock(mutex); // Constructor locks, destructor unlocks mutex
this->gift = gift; // Gift assignment operator
}
// Return a memberwise-copy of gift, tries to be thread safe (but is it?)
Gift get ()
{
Lock lock(mutex); // Constructor locks, destructor unlocks mutex
return gift; // Gift copy constructor
}
};
Мне нужна корзина:: получите, чтобы выполнить свой конструктор копии копии (возвращаемого объекта temp) до уничтожения объекта блокировки. В противном случае возвращаемый объект-подарок может быть поврежден одновременным вызовом.
Мои тесты показывают, что подарочная копия действительно создана до уничтожения блокировки, однако она гарантирована? Если нет, мне нужно создать вторую временную функцию внутри функции, например:
Gift get ()
{
Gift result;
{
Lock lock(mutex);
result = gift;
}
return result;
}