贵阳网站开发公司,公司网站建设费计入哪个科目,广州建设集团网站,网站开发 后端返回前端一个地址 有什么用很久之前#xff0c;我们说到了new和delete关键字。
new在堆上分配内存#xff0c;需要delete来删除内存、释放内存#xff0c;因为它不会自动释放内存。
智能指针是实现过程自动化的一种方式#xff0c;即当我们调用new时#xff0c;我们不需要调用delete关键字。
在很…很久之前我们说到了new和delete关键字。
new在堆上分配内存需要delete来删除内存、释放内存因为它不会自动释放内存。
智能指针是实现过程自动化的一种方式即当我们调用new时我们不需要调用delete关键字。
在很多情况下我们甚至不需要调用new。
智能指针实际上是一个原始指针的包装当我们创建一个智能指针它会调用new并为我们分配内存然后基于我们使用的智能指针这些内存会在某一时刻自动释放。
我们首先来了解一下unique_ptr
unique_ptr是作用域指针是超出作用域时他会被销毁然后调用delete
我们不可以复制一个unique_ptr因为如果复制一个unique_ptr那么我们就有两个指针指向了同一块内存地址。如果其中一个die了那么它就会释放这段内存也就是说指向同一块内存的第二个unique_ptr指向了被释放的内存所以我们不可以复制unique_ptr。
注意要访问智能指针我们需要memory头文件
#includeiostream
#includestring
#includememoryclass Entity
{
public:Entity() //构造函数{std::coutCreate Entity!std::endl;}~Entity() //析构函数{std::coutDestory Entity!std::endl;}void Print(){}
};int main()
{{// std::unique_ptrEntity entity(new Entity()); //entitynew Entity是不可以的因为unique_ptr需要显式地调用//尖括号的Entity是unique_ptr的模版entity是unique_ptr的名字std::unique_ptrEntity entity std::make_uniqueEntity();//推荐因为如果构造函数抛出异常这种方式会稍微安全一些因为我们不会得到一个没有引用的悬空指针从而造成内存泄露entity-Print();//我们可以调用想要的任何方法 }std::cin.get();
}
共享指针shared_ptr的工作方式是通过引用计数引用计数基本上是一种方法可以跟踪我们的指针有多少个引用一旦引用计数达到0它就被删除了
shared_ptr需要分配一块内存叫做控制块用来存储引用计数
弱指针weak_ptr