標題不好下
主要問題是
一個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出去給外面操作
該怎麼做比較好呢?
謝謝