πŸ’£(μ½”λ”© κ·œμΉ™) μ°Έμ‘° ν•œμ • λ©”μ„œλ“œ ,

보물창고·2024λ…„ 3μ›” 4일
0

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

λͺ©λ‘ 보기
62/62
  • 넀이버 λΈ”λ‘œκ·Έμ˜ xValue와 μ—°κ΄€λœ ν¬μŠ€νŠΈμ΄λ‹€.

μ°Έμ‘° ν•œμ •μ‚¬λ₯Ό μ™œ μ‚¬μš©ν•΄μ•Ό ν• κΉŒ? 240804

  • μ•„λž˜μ˜ μ½”λ“œλ₯Ό 보면, μ‚¬μš©ν•΄μ•Όν•  ν•„μš”μ„±μ„ λŠλ‚„μˆ˜ μžˆλ‹€.

1) 일반적으둜 μ‚¬μš©ν•˜λŠ” Get ν•¨μˆ˜.

2) μ°Έμ‘° ν•œμ •μ‚¬λ₯Ό μž‘μ„±ν•œ Get ν•¨μˆ˜.
: 차라리 λ³΅μ‚¬λ³΄λ‹€λŠ” 이동을 ν•˜λŠ”κ²Œ 더 νš¨μœ¨μ μ΄λ‹€.


μ°Έμ‘° ν•œμ •μ‚¬κ°€ 1개 νƒ€μž…λ§Œ μžˆλ‹€λ©΄?

  • lvalue ν•œμ •μ‚¬λ§Œ 있으면 rvalue ν˜ΈμΆœν•˜λŠ” μ½”λ“œλŠ” 였λ₯˜ λ°œμƒν•œλ‹€.

  • rvalue ν•œμ •μ‚¬λ§Œ μžˆλ”°λ©΄, lvalue ν˜ΈμΆœν•˜λŠ” μ½”λ“œλŠ” 였λ₯˜ λ°œμƒν•œλ‹€.

λ‚΄μš©

  • 기쑴의 λ©€λ²„ν•¨μˆ˜λŠ” 객체의 νƒ€μž…(lvalueλ“  rvalueλ“  )에 상관없이 호좜이 κ°€λŠ₯함.

  • μ°Έμ‘° ν•œμ • λ©”μ„œλ“œκ°€ λ‚˜νƒ€λ‚¬λŠ”λ°, 이 μΉœκ΅¬λŠ” returnType funcName() μ°Έμ‘° ν•œμ •μž
    μˆœμ„œλŒ€λ‘œ ν•¨μˆ˜ μ—°μ‚°μž 뒀에 & 참쑰자λ₯Ό μž‘μ„±ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•¨.

μ‚¬μš©ν•˜λŠ” λͺ©μ .

-> ν˜ΈμΆœν•˜λŠ” μͺ½μ˜ λ°›λŠ” νƒ€μž…μ— 따라 볡사 λ˜λŠ” 이동 λ™μž‘μ„ μˆ˜ν–‰ν•  수 있게 ν•œλ‹€. μ°Έμ‘° ν•œμ • λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ get ν•¨μˆ˜ 호좜이 λΆˆκ°€ν•˜κ²Œ ν•˜λŠ” μ œμ–΄ν•  수 있고, 볡사, 이동에 λŒ€ν•œ λͺ…μ‹œκ°€ κ°€λŠ₯ν•˜λ‹€.

μ–Έμ œ μ‚¬μš©? μš©λ„?

: get ν•¨μˆ˜μ˜ 경우, 볡사 λ˜λŠ” 이동해야 ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€λ©΄, 이 λ•Œ μ‚¬μš©ν•˜μž.

λ°˜ν™˜νƒ€μž… ν•¨μˆ˜μ΄λ¦„ () & ? -> lvalue객체만 ν˜ΈμΆœκ°€λŠ₯!
λ°˜ν™˜νƒ€μž… ν•¨μˆ˜μ΄λ¦„ () && ? -> rvalue 객체만 ν˜ΈμΆœκ°€λŠ₯!

  • ν•¨μˆ˜ 뒀에 & μ°Έμ‘°μžκ°€ ν•œκ°œ μžˆλ‹€λ©΄ , 이 λ©€λ²„ν•¨μˆ˜λŠ” lvalue κ°μ²΄μ—μ„œλ§Œ 호좜이 κ°€λŠ₯함.

  • ν•¨μˆ˜ 뒀에 & μ°Έμ‘°μžκ°€ 두 개 μžˆλ‹€λ©΄, 이 λ©€λ²„ν•¨μˆ˜λŠ” rValue κ°μ²΄μ—μ„œλ§Œ 호좜이 κ°€λŠ₯함.

μ˜ˆμ‹œ μ½”λ“œ

  • μ˜ˆμ‹œμ½”λ“œλ₯Ό 보면, Object{} λŠ” μž„μ‹œκ°μ²΄μ΄κΈ° λ•Œλ¬Έμ— , lvalue κ°μ²΄μ—μ„œλ§Œ ν˜ΈμΆœκ°€λŠ₯ν•œ,
    func1() ν•¨μˆ˜λŠ” 호좜이 λΆˆκ°€ν•¨.

  • obj κ°μ²΄λŠ” lvalue 객체이기 λ•Œλ¬Έμ—, rValue κ°μ²΄μ—μ„œλ§Œ ν˜ΈμΆœκ°€λŠ₯ν•œ, func2ν•¨μˆ˜λŠ” 호좜 λΆˆκ°€ν•˜λ§ˆ.

  • obj1 객체도 obj와 λ§ˆμ°¬κ°€μ§€

  • obj2 κ°μ²΄λŠ” rvalue 객체이기 λ•Œλ¬Έμ— func2() ν•¨μˆ˜λŠ” 호좜 λΆˆκ°€ν•¨!


μ•„λž˜λŠ” 240305 μΆ”κ°€.

λ°˜ν™˜λ°›λŠ” νƒ€μž…μ— λ”°λ₯Έ 볡사 , 이동에 λŒ€ν•΄

: λͺ¨λ˜ μ΄νŽ™ν‹°λΈŒ 12ν•­λͺ© λ‚΄μš©

  • λŒ€μž…λ°›λŠ” 객체의 νƒ€μž…μ— λ”°λΌμ„œ 볡사냐? μ•„λ‹ˆλ©΄ 아무일도 μΌμ–΄λ‚˜μ§€ μ•ŠμœΌλƒμ— λŒ€ν•΄

  • μ•„λž˜μ˜ μ½”λ“œλŠ” λŒ€μž…λ°›λŠ” λŒ€μƒμ΄ 값이기 λ•Œλ¬Έμ— , GetDataκ°€ 참쑰라고 ν•˜λ”λΌλ„ 볡사가 λ°œμƒν•¨.
    : μ™œλƒν•˜λ©΄ λŒ€μž…λ°›λŠ” λŒ€μƒμ˜ νƒ€μž…μ΄ 값이기 λ•Œλ¬Έμ— κ°œλ³„μ˜ λ©”λͺ¨λ¦¬μ£Όμ†Œλ₯Ό 가지고 있기 λ•Œλ¬Έμž„.

  • μ΄λ²ˆμ—λŠ” λŒ€μž…λ°›λŠ” λŒ€μƒμ„ 참쑰둜 λ³€κ²½ν•΄λ³΄μž.
    -> 볡사가 λ°œμƒν•˜μ§€ μ•ŠλŠ” 것을 확인할 수 있음.

μœ„μ˜ μ˜ˆμ œμ—μ„œ μ°Έμ‘° ν•œμ •μ‚¬λ₯Ό 가지고 μ™€λ³΄μž.

  • λ‚΄μƒκ°μ—λŠ” 볡사λ₯Ό λͺ»ν•˜κ²Œ ν•˜κ³  싢은데, μ§€κΈˆ μ΄μƒνƒœμ—μ„œλŠ” Data의 볡사 μƒμ„±μžλ₯Ό delete ν•˜λŠ” 방법밖에 μ—†λ‹€!

: lvalue μ°Έμ‘° ν•œμ •μ‚¬ λ₯Ό μž‘μ„±ν•˜λ”λΌκ³  어쨋든 λ°˜ν™˜νƒ€μž…μ€ lvalue μ΄μ§€λ§Œ, λ‹€λ₯Έ 객체이기 λ•Œλ¬Έμ—..

  • rvalue μ°Έμ‘° ν•œμ •μ‚¬λ₯Ό μž‘μ„±ν•œλ‹€λ©΄ μ—λŸ¬λ°œμƒν•˜κ² μ°Œ???

λ°›λŠ” λŒ€μƒμ΄ rvalue 객체의 κ²½μš°λŠ”???

  • μ•„λž˜μ˜ μ½”λ“œλ₯Ό 보면, 이와 같은 상황은 λ‹Ήμ—°νžˆ μ—λŸ¬κ°€ λ°œμƒν•¨.

λ°˜ν™˜ν•˜λŠ” μͺ½μ΄ rvalue라고 ν•œλ‹€λ©΄?

  • μ˜ˆμ‹œ μ½”λ“œ.
    -> μ•„λž˜μ˜ μ½”λ“œμ—μ„œ 생각할 수 μžˆλŠ” 점은 μž„μ‹œκ°μ²΄λ‘œ 인해 볡사가 λ°œμƒν•˜λŠ” 것은 쒋지 μ•Šμ•„.
    이동 ν•˜λŠ” 것이 μ’‹μž–μ•„...
    이미 μ‚¬λΌμ§€λŠ” μž„μ‹œκ°μ²΄μ˜ Data 값을 κ·ΈλŒ€λ‘œ 이동 μ²˜λ¦¬ν•˜λŠ” 것이 λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•  수 μžˆλ‹€.

  • Data ν΄λž˜μŠ€μ—λ‹€κ°€ 이동 μ½”λ“œ μž‘μ„±ν•΄μ„œ λ‹€μ‹œ 싀행해도, Object의 GetData멀버 ν•¨μˆ˜λŠ”
    rvalue , lvalue 처리 κ°€λŠ₯ν•΄μ„œ μ—¬μ „νžˆ 볡사 λ°œμƒ.

  • μœ„μ—μ„œ ν™•μΈν•œ μ°Έμ‘°ν•œμ •μ‚¬λ₯Ό μ΄μš©ν•˜λ©΄ μ–΄λ–»κ²Œ 될까?
    : μ°¨λ‹¨ν•˜κ³  μžˆλŠ” 것을 확인할 수 μžˆλ‹€.
  • μž„μ‹œκ°μ²΄μ— λŒ€ν•΄μ„œ μ΄λ™μ²˜λ¦¬ν•˜κ³  μ‹Άλ‹€λ©΄, 그러면 μ°Έμ‘° ν•œμ •μ‚¬λ₯Ό μ˜€λ³΄λ‘œλ”© (μ€‘λ³΅μ μž¬) ν•˜λ©΄ λ˜κ² μ§€???
    : μ—‡????
    -> rvalue둜 λ¦¬ν„΄ν•˜κ³  μžˆλŠ”λ° μ°Έμ‘° νƒ€μž…μ΄ lvalue 참쑰이기 λ•Œλ¬Έμ— λ°œμƒ.
  • μ°Έμ‘° νƒ€μž…μ„ &&으둜 λ³€κ²½ν•΄μ„œ 싀행해보면?
    -> Data 멀버가 이동 μ²˜λ¦¬λ˜λŠ” 것을 확인할 수 μžˆλ”°....

κ²°λ‘ 

: μ°Έμ‘° ν•œμ •μ‚¬λ₯Ό μ‚¬μš©ν•˜μž!!

  • : rvalue , lvalue 객체λ₯Ό λΆ„λ₯˜ν•΄ 호좜 μ—¬λΆ€λ₯Ό ꡬ뢄지을 수 μžˆλ‹€.
    -> Get ν•¨μˆ˜λŠ” μ°Έμ‘° ν•œμ •μ‚¬ λ°˜λ“œμ‹œ μž‘μ„±ν•˜μž.
profile
πŸ”₯πŸ”₯πŸ”₯

0개의 λŒ“κΈ€