cpp中的智能指针

unique_ptr

unique_ptr独享它指向的对象,也就是说,同时只有一个unique_ptr指向同一个对象,当这个unique_ptr被销毁时,指向的对象随即也被销毁。

初始化

假设有一个class A{};

这里要用自定义的数据类型,是因为cpp中默认数据类型没有析构函数,无法提现智能指针的作用。

因为new出来的对象一定要手动delete才会调用析构函数,用智能指针可以避免这一点。

方法一:

1
2
unique_ptr <A> p(new A);
unique_ptr <A> p(new A(调用构造函数));

方法二:(推荐)

1
unique_ptr <A> p = make_unique <A> (调用构造函数) //cpp14

方法三:(不推荐)

1
2
A* p = new A;
unique_ptr <A> up(p);

使用要点

unique_ptr禁用了拷贝构造函数,不能直接赋值、拷贝构造,等等

get()方法可以返回裸指针

智能指针就是类,类中有一个指针,管理着原始指针

作为函数的参数的时候,不能传值,只能传引用,因为没有拷贝构造函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A
{
public:
int x;
A(int _x) : x(_x) {}
void show()
{
cout << x;
}
};

void show(unique_ptr <A>& p)
{
p->show;
}

int main()
{
unique_ptr <A> p = make_unique <A> (1);
}

cpp中的智能指针
http://example.com/2025/08/10/2025-8-10 cpp中的智能指针/
作者
Kiriao
发布于
2025年8月10日
许可协议