c++unique_ptr的简单介绍
本篇文章给大家谈谈c++unique_ptr,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
如何:创建和使用unique_ptr实例
无法将它复制到另一个unique_ptr
,(除非它是可修改 rvalue) 通过值传递给函数,或需要对其进行复制的任何标准模板库 (STL) 算法中使用。Aunique_ptr只能移动。
这意味着内存资源的所有权将转移到新的unique_ptr和原始unique_ptr不再拥有它。卖埋高
我们建液烂议您将一个对象限制为一个所有者,因为拥有多个程序逻辑增加复杂性。
因此,当您中尺需要为普通的 C++ 对象的智能指针,使用unique_ptr。
下图说明了两个转让所有权unique_ptr实例。
unique_ptr在中定义memorySTL 中的标头。
它是完全有效与原始指针,可以使用 STL 容器中。
为啥unique_ptr比auto_ptr好?
即便通过备大上述策略2把两次delete同一对象空间的错误搞定了,但是万一程序又使用了先前的仿搭竖,已经没有对象空间所有权的智能指针,还会引起未定义行为,因为它指向了一个非法数据。当然这是针对auto_ptr而言的。
对于unique_ptr而言,它就好像是引用,它只能指向某一特定对象,它一旦指向某一对象别的unique_ptr就无法再指向该对象了,从而避免了两次delete和使用无效智能指针的错误。
Unique_ptr不允许两个同作用域,同生存期的指针互相赋值,但是它允许把一个临时性的unique_ptr指针赋给一个非临时性的unique_ptr指针。我想这也是为了保证只有一个unique_ptr指针能指向某一特定对象吧,因为临时性的unique_ptr使完了就没了,它不会干扰干扰外部作用域的unique_ptr指针。至于说这对于容器有好枝梁处,我还真没想到具体好处是啥。
两个同作用域同生存期的unique_ptr指针互相赋值可以使用move函数,如下图所示:
此外,unique_ptr还可以用于数组空间的分配,它会自动调用delete[]进行空间的释放,如下图所示:
[img]为什么c++ unique_ptr指针为右值时可以赋给share_ptr
只是这个操作的话,不会。李腔因为这个 unique_ptr 会立刻被赋值为 nullptr ,即不指向任何对象。右值一般接着就会被立即销毁,所以没有问题
将来这个 shared_ptr 可能会赋值给别的 shared_ptr ,这样是有可森扰销能造成两个 shared_ptr 指向一个对象。没有这个心理准此游备也不会把 unique_ptr 赋给 share_ptr
关于c++unique_ptr和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。