智能指针 C+中智能指针及其类型的介绍

栏目:财经 2021-09-28 05:18:50
分享到:

首先,你应该从这篇文章中学到以下几点:

1.C/C ++中指针的重要性。

2.普通指针有问题。

3.为什么引入智能指针?

4.智能指针的类型。

使用智能指针,我们可以使指针以不需要显式调用delete的方式工作。智能指针是指针的包装类,重载运算符为*和->。智能指针类的对象看起来像一个普通的指针,但是它可以执行很多普通指针不能自动破坏的事情,比如引用计数等等。

想法是使用带有指针、析构函数和重载运算符的类。因为当对象超出范围时会自动调用析构函数,所以动态分配的内存会自动删除。考虑以下简单的智能ptr类

为所有类型编写一个智能指针类。

是的,我们可以使用模板来编写通用智能指针类。下面的C ++代码演示了相同的过程

注意:智能指针在资源管理中也很有用,例如文件句柄或网络套接字。

智能指针的类型:

1.unique_ptr

如果您使用唯一的指针,如果创建了一个对象,并且指针P1指向该对象,则同一时间只能有一个指针指向该对象。因此,我们不能与其他指针共享它,但是我们可以通过删除P1将控制权转移给P2。

2.shared_ptr

如果使用shared_ptr,多个指针可以同时指向该对象,它将使用use_count维护引用计数器。

3.weak_ptr

它与shared_ptr非常相似,只是它不维护引用计数器。在这种情况下,指针对对象没有强有力的控制。原因是,如果假设指针持有对象并请求其他对象,它们可能会形成死锁。

C ++库以auto_ptr、unique_ptr、shared_ptr和weak_ptr的形式提供智能指针的实现。