ν¬μΈν°κ° κ°λ¦¬ν€λ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ ν΄μ νλ ν¬μΈν°. κ°λ°μλ λ©λͺ¨λ¦¬ κ΄λ¦¬μ ν¬κ² μ κ²½ μΈ νμκ° μλ€.
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 |