C, C++

[C++] 슀마트 포인터

벼리01 2024. 9. 19. 09:54

포인터가 κ°€λ¦¬ν‚€λŠ” λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ ν•΄μ œν•˜λŠ” 포인터. κ°œλ°œμžλŠ” λ©”λͺ¨λ¦¬ 관리에 크게 μ‹ κ²½ μ“Έ ν•„μš”κ°€ μ—†λ‹€.

 

C++은 객체 생성 μ‹œ μ‚¬μš©ν–ˆλ˜ 동적 λ©”λͺ¨λ¦¬ λ˜λŠ” μ‹œμŠ€ν…œ μžμ›μ„ μ†Œλ©Έ μ‹œ μžλ™μœΌλ‘œ μ†Œλ©Έμ‹œν‚€λŠ” λ§€μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•œλ‹€. λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ λ³€μˆ˜λŠ” μŠ€νƒμ—μ„œ 제거되며, 객체의 μ†Œλ©Έμžκ°€ ν˜ΈμΆœλ˜μ–΄ μžμ‹ μ΄ μ‚¬μš©ν•˜λ˜ μžμ›μ„ μ•Œμ•„μ„œ μ •λ¦¬ν•œλ‹€.

 

`auto_ptr` λ™μ μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ„ μžλ™μœΌλ‘œ ν•΄μ œν•˜λŠ” 래퍼 클래슀. // deprecated. use unique_ptr instead.

`template<typename T> class auto_ptr`

포인터가 κ°€λ¦¬ν‚€λŠ” λŒ€μƒμ˜ νƒ€μž… T λ₯Ό 인자둜 λ°›μ•„ `T*` ν˜• 포인터λ₯Ό κ΄€λ¦¬ν•œλ‹€. μƒμ„±μžλ‘œ μ „λ‹¬λœ ν¬μΈν„°λŠ” μ†Œλ©Έμžμ—μ„œ delete 둜 ν•΄μ œν•œλ‹€.

  unique_ptr<double> rate(new double);
  *rate = 3.14;
  
  cout << *rate << endl;  // 3.14

 

 

ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ 객체의 μ†Œλ©Έμžλ₯Ό ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ—, `unique_ptr` 클래슀 λ‚΄ μ†Œλ©Έμžμ— μž‘μ„±λœ `delete` κ°€ 포인터λ₯Ό ν•΄μ œν•˜λ©΄μ„œ μžλ™μœΌλ‘œ ν•΄μ œλ˜λŠ” κ²ƒμ²˜λŸΌ 보인닀.

 

 

 

πŸ“Œκ΅¬ν˜„

#include <iostream>
#include <string>
#include <memory>

using namespace std;

template<typename T>
class my_smart_ptr {
    
    public:
    my_smart_ptr(T* ptr){
        this->my_ptr = ptr;
    }
    
    ~ my_smart_ptr(){
        delete this->my_ptr;
    }
    
    T* operator->() const{
        return my_ptr;
    }
    
    T operator*() const{
      return *my_ptr;  
    }
    
    
    private:
    T* my_ptr;
};

int main()
{
    my_smart_ptr<string> str(new string("test"));
  
    cout << *str << endl; // test  
    cout << str->size() << endl; // 4
  
    return 0;
}

 

 

`shared_ptr` (C++ 11 이후뢀터 ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— ν¬ν•¨λ˜μ—ˆμŒ. C++ 11 μ΄μ „μ—μ„œ μ‚¬μš©ν•˜λ €λ©΄ boost 라이브러리) ν•˜λ‚˜μ˜ 객체λ₯Ό μ—¬λŸ¬ 포인터가 μ°Έμ‘°ν•  수 μžˆλ„λ‘ κ΅¬ν˜„λœ 슀마트 포인터 래퍼 클래슀. λ‚΄λΆ€μ μœΌλ‘œ 레퍼런슀 μΉ΄μš΄νŒ…μ„ μˆ˜ν–‰ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό κ°€λ¦¬ν‚€λŠ” μΈμŠ€ν„΄μŠ€μ˜ 수λ₯Ό μΆ”μ ν•œλ‹€. 레퍼런슀 μΉ΄μš΄ν„°κ°€ 0이 λ˜μ—ˆμ„ λ•Œ λ©”λͺ¨λ¦¬κ°€ ν•΄μ œλœλ‹€.

 

 

 

[C/C++ ν”„λ‘œκ·Έλž˜λ° : 쀑급] 11. 슀마트 포인터

Chapter 11. 슀마트 포인터 슀마트 ν¬μΈν„°λŠ” C++μ—μ„œ 동적 λ©”λͺ¨λ¦¬ 관리λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€. 그듀은 κΈ°λ³Έ 포인터와 λΉ„μŠ·ν•˜κ²Œ λ™μž‘ν•˜μ§€λ§Œ, μ μ ˆν•œ μ‹œμ μ— μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜μ—¬ λ©”λͺ¨λ¦¬

gdngy.tistory.com

 

'C, C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[C++] STL  (0) 2024.09.05
[C++] ν…œν”Œλ¦Ώ(Template)  (0) 2024.08.29
[C++] 상속(Inheritance)  (0) 2024.08.29
[C++] 객체 μ§€ν–₯  (6) 2024.08.19
[C] 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ή  (0) 2024.08.13