当自动变量超出范围时,操作将以何种顺序发生?

时间:2017-04-11 13:52:32

标签: c++ scope language-lawyer c++98

我正在构建一个简单的{ mutex, value }对,如下所示,如果我的用例定义明确,我想咨询c ++律师。

工具定义

template<typename T, class mutex> class Locker;

template<typename T, class mutex>
class Mutexed
{
    T     _value;
    mutex _mutex;
    friend class Locker<T, mutex>;
public:
    Mutexed() {}
    Mutexed(const T& init)           : _value(init) {}
    Mutexed(const Mutexed<T>& other) : _value(other._value) {}
};

template<typename T, class mutex>
class Locker
{
    Mutexed<T, mutex>& _mutexed;
public:
    Locker(Mutexed<T, mutex>& mutexed) : _mutexed(mutexed) { _mutexed.mutex.lock(); }
    ~Locker() { _mutexed.mutex.unlock(); }
    const T& operator*() const { return _mutexed.value; }
          T& operator*()       { return _mutexed.value; }
};

用例

Mutexed<int, MyMutex> answer(42);
int getAnswer() { Locker<int> lock(answer); return *lock; }

我的关注

由于*lock id est const T& operator*() const { return _mutexed.value; }返回对answer._value的引用,因此制作了从int&int的副本。但是,因为lock在返回时超出了范围:哪个副本和互斥锁将首先发生

TL;博士

我的用例不是UB xor我需要写吗?

const int result = *lock;
return result;

0 个答案:

没有答案