热爱互联网

c++ 11 —- unique_ptr

详见:
http://en.cppreference.com/w/cpp/memory/unique_ptr

把 en 改成 zh 即可看中文版的,不过是通过google翻译过来的,有一些翻译不是很准确:
http://zh.cppreference.com/w/cpp/memory/unique_ptr

unique_ptr 是一个智能指针:
(1)保留了唯一的一个对象的所有权通用指针,不能拷贝或复制。
(2)在unique_ptr超出作用域后会自动destroy所指向的对象。
下面是个小例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream>
#include<string>
#include<memory>
using namespace std;
 
struct Foo{
	Foo() { cout<<"foo::foo" <<endl; }
	~Foo(){ cout << "Foo::" <<endl; }
	void bar() { cout<< "Foo::bar" <<endl; }
};
 
void f(const Foo& foo)
{
	cout << "f(const Foo& foot)" <<endl;
}
 
int main()
{
	unique_ptr<foo> p1(new Foo);
	if(p1)
		p1->bar();
 
	{
		unique_ptr<foo> p2(move(p1));
 
		if(p1 == nullptr)
			cout << "p1 is nullptr" <<endl;
 
		f(*p2);
 
		p1 = move(p2);
 
		cout << "destroying p2..." <<endl;
	}
 
	if(p1)
		p1->bar();
 
	return 0;
}

Post a Comment

Your email is kept private. Required fields are marked *