推 wulouise: gcc支援copy elision很久了,dev c++不要用 godbolt方便01/21 23:12
→ wulouise: godbolt assembly都直接展開給你看,不用自己寫dtor測試01/21 23:13
推 Dracarys: 跟copy elision沒有關係,而是c3 = c2.reverse();呼叫01/22 22:02
→ Dracarys: 到了implicit copy assignment operator,只會做member01/22 22:02
→ Dracarys: -wise copy,所以c3的_str和等號右邊的一樣,指到的arr01/22 22:02
→ Dracarys: ay都會被等號右邊的prvalue的destructor幹掉。如果遵守01/22 22:02
→ Dracarys: rule of 0/3/5就不會被這deprecate很久的功能雷到:01/22 22:02
→ Dracarys: 沒客製化copy-assignment 的sanitizer output:01/22 22:02
→ Dracarys: uncomment掉就好了01/22 22:02
謝謝樓上兩位大大 對我之前搞錯了...不管哪個版本c2.reverse()都在賦值給c3之後被解構
了(但是dev c++可以output 出正常的array(咦?))
還有運算子的部分還是很迷惑 我試了一下如果把copy constuctor刪掉,用非參照的方式多
載=就過的了了(當然還是印不出array)
到底發生了什麼事...
※ 編輯: amamoimi (1.200.243.113 臺灣), 01/23/2024 07:48:17
推 wulouise: sorry我沒看code qq 01/24 11:23