前言
本次笔记记录如下知识点
- 智能指针的原理
- unique_ptr的原理及作用
- shared_ptr的原理及作用
- weak_ptr的原理及作用
一、智能指针的原理
二、unique_ptr的原理及作用
1、unique_ptr的作用
2、unique_ptr的实现原理
代码实现示例如下
template <class T,class D = default_delete<T>>
class unique_ptr {
public:
typedef some_define pointer;
typedef T element_type;
concept unique_ptr() noexcept;
explicit unique_ptr(pointer p) noexcept;
~unique_ptr();
unique_ptr& operator=(unique_ptr&& u) noexcept;
pointer get() const noexcept;
pointer release() noexcept;
unique_ptr(const unique_ptr&) = delete;
unique_ptr& operator=(const unique_ptr&) = delete;
};
3、unique_ptr中的使用
代码示例如下
#include <vector>
class Example
{
public:
Example(int param = 0)
{
number = param;
cout << "Example: " << number << endl;
}
~Example() { cout << "~Example: " << number << endl; }
void test_print() { cout << "in test print: number = " << number << endl; }
void set_number(int num) { number = num; }
private:
int number;
};
int main()
{
unique_ptr<Example> ptr(new Example(1));
ptr.get()->test_print();
ptr->set_number(10);
ptr.get()->test_print();
Example* p = ptr.release();
ptr.reset(p);
ptr.get()->test_print();
ptr.reset();
if (ptr)
{
cout << "ptr1 is valid\n";
}
cout << "-------------------------------------\n";
vector<unique_ptr<Example>> v(7);
for (int i = 0; i < 7; i++)
{
v[i] = unique_ptr<Example>(new Example(50 + i));
}
v[6]->test_print();
v[6] = unique_ptr<Example>(new Example(46));
v[6]->test_print();
v.push_back(unique_ptr<Example>(new Example(66)));
v[7]->test_print();
v.push_back(make_unique<Example>(77));
v[8]->test_print();
return 0;
}
运行结果如下 
三、shared_ptr的原理及作用
1、unique_ptr的作用
|