😭move 와 const object

보물창고·2023λ…„ 1μ›” 2일
0

c++Intermediate μ½”λ“œλˆ„λ¦¬

λͺ©λ‘ 보기
44/62

move μƒμ„±μžμ˜ 의미

: μžμ›μ„ μ΄μ „ν•˜κ³ , λ©€λ²„λ‘œ 가지고 μžˆλŠ” 포인터λ₯Ό 리셋( pointer = 0)ν•˜λŠ” κ²ƒμž„.

  • 생각을 ν•΄λ³΄μž.
    const 객체가 μ˜λ―Έν•˜λŠ” 것은 μƒμˆ˜μ΄κ³ , 즉 μžμ›λ³€κ²½μ„ ν—ˆμš©ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•¨.
    κ·Έλ ‡λ‹€λ©΄ const 객체λ₯Ό λŒ€μƒμœΌλ‘œ move λ₯Ό ν•œλ‹€λ©΄ , μƒμˆ˜ 객체의 μžμ›μ΄ 이동 될것인가???

μƒμˆ« 객체λ₯Ό move둜 μ‚¬μš©ν•˜λ©΄ μ–΄λ–»κ²Œ 될까?

: κ²°λ‘ μ μœΌλ‘œλŠ” 볡사가 λ°œμƒν•¨.

이동 μƒμ„±μžμ™€ 이동 μ—°μ‚°μžλŠ” λΉ„μƒμˆ˜ rvalue 참쑰만 받을 수 있음.
const object&&λŠ” 이동 μƒμ„±μžμ™€ 이동 λŒ€μž…μ—°μ‚°μžμ— μ§„μž… λͺ»ν•¨.

const object&& λŠ” 볡사 μƒμ„±μžμ— μ§„μž…ν•¨.

const Test t1;
Test t2 = move(t1);
  • κ²°κ³Ό
    : copyκ°€ λ°œμƒν•¨.
  • 이유
    : move의 μ˜λ―Έκ°€ μžμ›μ„ μ΄μ „ν•˜κ³ , λ¦¬μ…‹ν•˜λŠ” 것인데...
    -> constλŠ” 변경이 λΆˆκ°€λŠ₯함!

  • μ½”λ“œ
    : μ§„μ§œμ—¬??? κ°•μ œμ μœΌλ‘œ && μΊμŠ€νŒ…ν•΄λ³΄μž.
    -> 였λ₯˜ λ°œμƒν•¨.
const Test t1;
Test t2 = static_cast<Test&&>(t1);
  • μ™œ ?
    : μƒμˆ˜μ„±μ„ 가진 lvalueλ₯Ό λΉ„μƒμˆ˜ rvalue둜 μΊμŠ€νŒ…μ„ μ‹œλ„ν–ˆκΈ° λ•Œλ¬Έμž„.
  • μ΄λ ‡κ²ŒλŠ” κ°€λŠ₯함.
const Test t1;
Test t2 = static_cast<const Test&&>(t1);

κ²°λ‘ 

: μƒμˆ˜ κ°μ²΄λŠ” move될 수 μ—†μŒ.
: : κ·ΈλŸ¬λ‚˜ μ—λŸ¬λŠ” λ°œμƒν•˜μ§€ μ•Šκ³ , 볡사 처리됨.


μ˜ˆμƒ

: μ•„λ¬΄λž˜λ„ μΈμžνƒ€μž…μ΄ const Test&둜 μ²˜λ¦¬λ˜μ§€ μ•Šμ„κΉŒ 생각됨.
-> 볡사 μƒμ„±μžλŠ” lvalue , ravlue , const lvalue , const rvalue λͺ¨λ‘ 받을 수 μžˆμ–΄μ„œ copyλ₯Ό call ν•˜κ³  있음.

profile
πŸ”₯πŸ”₯πŸ”₯

0개의 λŒ“κΈ€