[問題] 透過copy elision 來return by value
標題不好下
主要問題是
一個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出去給外面操作
該怎麼做比較好呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.30.36 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1598931374.A.FDE.html
→
09/01 12:19,
3年前
, 1F
09/01 12:19, 1F
→
09/01 12:20,
3年前
, 2F
09/01 12:20, 2F
→
09/01 12:21,
3年前
, 3F
09/01 12:21, 3F
→
09/01 12:30,
3年前
, 4F
09/01 12:30, 4F
→
09/01 18:18,
3年前
, 5F
09/01 18:18, 5F
→
09/01 19:40,
3年前
, 6F
09/01 19:40, 6F
→
09/01 19:40,
3年前
, 7F
09/01 19:40, 7F
→
09/01 20:50,
3年前
, 8F
09/01 20:50, 8F
→
09/02 00:04,
3年前
, 9F
09/02 00:04, 9F
→
09/02 00:05,
3年前
, 10F
09/02 00:05, 10F
→
09/02 00:06,
3年前
, 11F
09/02 00:06, 11F
→
09/02 00:07,
3年前
, 12F
09/02 00:07, 12F
→
09/02 00:09,
3年前
, 13F
09/02 00:09, 13F
→
09/02 00:10,
3年前
, 14F
09/02 00:10, 14F
→
09/02 00:35,
3年前
, 15F
09/02 00:35, 15F
→
09/02 00:35,
3年前
, 16F
09/02 00:35, 16F
→
09/02 00:37,
3年前
, 17F
09/02 00:37, 17F
→
09/02 00:37,
3年前
, 18F
09/02 00:37, 18F
→
09/02 00:38,
3年前
, 19F
09/02 00:38, 19F
→
09/02 00:46,
3年前
, 20F
09/02 00:46, 20F
→
09/02 00:48,
3年前
, 21F
09/02 00:48, 21F
→
09/02 00:48,
3年前
, 22F
09/02 00:48, 22F
→
09/02 00:49,
3年前
, 23F
09/02 00:49, 23F
→
09/03 10:25,
3年前
, 24F
09/03 10:25, 24F
→
09/03 10:25,
3年前
, 25F
09/03 10:25, 25F
→
09/03 10:26,
3年前
, 26F
09/03 10:26, 26F
→
09/03 10:26,
3年前
, 27F
09/03 10:26, 27F
→
09/03 11:08,
3年前
, 28F
09/03 11:08, 28F
→
09/03 11:10,
3年前
, 29F
09/03 11:10, 29F
→
09/03 11:10,
3年前
, 30F
09/03 11:10, 30F
→
09/03 11:11,
3年前
, 31F
09/03 11:11, 31F
→
09/03 11:12,
3年前
, 32F
09/03 11:12, 32F
→
09/03 11:12,
3年前
, 33F
09/03 11:12, 33F
→
09/03 11:14,
3年前
, 34F
09/03 11:14, 34F
→
09/03 11:15,
3年前
, 35F
09/03 11:15, 35F
→
09/03 11:16,
3年前
, 36F
09/03 11:16, 36F