std::unique_ptr
std::unique_ptr
是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于 std::shared_ptr
允许多个 shared_ptr
引用同一个裸指针,它没有引用计数,它的性能比 shared_ptr
会高一点。
在用法上 std::unique_ptr
和 std::shared_ptr
是类似的,主要的不同是 std::unique_ptr
之间的赋值需要通过 std::move
实现。
在 code2 目录下新建一个 code5.cpp 文件:
#include <iostream>
#include <memory>
#include <functional>
struct A{
~A(){
std::cout<<"destruct A"<<std::endl;
}
};
int main(){
std::unique_ptr<int> p(new int(1));
std::cout<<*p<<std::endl;
{
std::unique_ptr<A> p(new A);
std::unique_ptr<A> p1 = std::move(p);
}
{
std::unique_ptr<A[]> p(new A[3]);
}
{
std::unique_ptr<A, std::function<void(A*)>> p(new A, [](A* ptr){
std::cout << "delete from a custom deleter...\n";
delete ptr;
});
}
}
编译和运行代码:在 build 目录下执行
g++ ../code5.cpp -o code5 -std=c++11 && ./code5
输出结果:
1
destruct A
destruct A
destruct A
destruct A
delete f