标题不好下
主要问题是
一个class被标注 copy constructor = delete的时候
我却透过by value的语意 使用他
具体code
我用lock_guard<...>来举例
https://wandbox.org/permlink/kNmQm9tWjXAJEbVH
看到不少code, 有人这样使用
lock_guard<mutex> getLock(){return lock_guard<mutex>{m};}
这种code 贴到ideone C++14就不给过
两个问题
1. 因为C++17 copy elision, 这种使用方式 是完全没问题的吗?
2. 假设没问题, 因为只有C++17后才能这样写, 我自己会觉得宁可不要写这种 code
尽量维持 backward compatible.
3. 如果好的包法 要怎么做呢?
以前通常是把get set包出去 内部用lock去r/w member
struct
{
void GetX(){ lock_guard...}
void SetX(...){lock_guard....}
private:
int x;
mutex m;
}
但这样变成 要提供get/set...
所以我猜才会有人想要提供一个RAII Locker的getter
让外面先acquire lock 直接把member public出去给外面操作
该怎么做比较好呢?
谢谢