Chapter 12. Dynamic Memory
来源:互联网 发布:淘宝红线绿线流量图 编辑:程序博客网 时间:2024/05/17 00:52
新标准库提供了两种智能指针(smart pointer)类型来管理动态对象。
智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。
新标准库提供的这两种智能指针的区别在于管理底层指针的方式:
shared_ptr 允许多个指针指向同一个对象;
unique_ptr 则“独占”所指向的对象。
weak_ptr 伴随类,它是一种弱引用,指向shared_ptr所管理的对象。
这三种类型都定义在 memory 头文件中。
shared_ptr<string>p1; //shared_ptr ,可以指向stringshared_ptr<list<int>>p2; //shared_ptr ,可以指向int 的 listif (p1&&p1->empty()) //如果p1不为空,检查它是否指向一个空string*p1 = "Hi"; //如果p1指向一个空string,解引用p1,将一个新值赋予string默认初始化的智能指针中保存着一个空指针。
p //Use p as a condition;true if p points to an object.*p //Dereference p to get the object to which p points.p.get() //Return the pointer in p.Use with caution;the object to which the returned pointer points //will disappear when the smart pointer deletes it.
shared_ptr独有的操作:
make_shared<T>(args) 返回一个shared_ptr,指向一个动态分配的类型为T的对象。使用args初始化对象。Return a shared_ptr pointing to a dynamically allocated object of type T.Useargs to initialize that object.
shared_ptr<T>p(q) p是shared_ptrq 的拷贝;此操作会递增q中的计数器。q中的指针必须能转换为T*.
p.unique() Reurnsture if p.use_count() is one;false otherwise.
shared_ptr<int> p3 = make_shared<int>(42); // shared_ptr that points to an int with value 42shared_ptr<string> p4 = make_shared<string>(10, '9'); // p4 points to a string with value 9999999999shared_ptr<int> p5 = make_shared<int>(); // p5 points to an int that is value initialized to 0
当然,我们通常用auto定义一个对象来保存make_shared的结果,这种结果较为简单:
// p6 points to a dynamically allocated, empty vector<string>auto p6 = make_shared<vector<string>>();
auto p = make_shared<int>(42); // object to which p points has one userauto q(p); // p and q point to the same object// object to which p and q point has two usersWhen we copy or assign ashared_ptr, eachshared_ptr keeps track of how many othershared_ptrs point to the same object.
auto p = make_shared<int>(42); // object to which p points has one userauto q(p); // p and q point to the same object// object to which p and q point has two users一旦一个shared_ptr的计数器变为0,它就会自动释放自己所管理的对象。
auto r = make_shared<int>(42); // int to which r points has one userr = q; // assign to r, making it point to a different address// increase the use count for the object to which q points// reduce the use count of the object to which r had pointed// the object r had pointed to has no users; that object is automaticallyfreed
Programs tend to use dynamic memory for one of three purposes:
1. They don’t know how many objects they’ll need.程序不知道自己需要使用多少对象。
2. They don’t know the precise type of the objects they need.程序不知道所需对象的准确类型。
3. They want to share data between several objects.程序需要在多个对象间共享数据。
vector<string> v1; // empty vector空vector{ // new scope新作用域vector<string> v2 = { "a", "an", "the" };v1 = v2; // copies the elements from v2 into v1} // v2 is destroyed, which destroys the elements in v2,,v2被销毁,其中的元素也被销毁 // v1 has three elements, which are copies of the ones originally in v2,v1有三个元素,是原来v2中元素的拷贝
- Chapter 12. Dynamic Memory
- Dynamic Memory
- Chapter 2. Memory Addressing
- Chapter 4 Cache Memory
- Chapter 5 Internal Memory
- Chapter 6 Extern Memory
- Chapter 9 Memory Management
- Chapter 10 Virtual Memory
- Dynamic memory allocation example
- Geeksquiz | Dynamic Memory Allocation
- C++11: Dynamic Memory
- 12-Dynamic Memory
- dynamic memory allocation
- dynamic memory allocation
- Dynamic Memory Networks & DMN+
- Chapter 4. Memory Management Debugging
- Chapter 6 Memory Hierarchy --- Locality
- Chapter 6 Memory Hierarchy -- Summary
- Faster R-CNN物体检测
- SIFT--尺度空间、高斯金字塔
- c++11的新特性---auto关键字
- 如何在学习Java过程中死锁跟踪分析的处理!
- 01 C++中complex.h头文件的写法(学自Boolan)
- Chapter 12. Dynamic Memory
- QNX的ASILD-Asil-D的认证RTOS系统QNX's ISO26262 ASIL D
- 2
- linux基本知识
- 洛谷P2422 良好的感觉(简单数据结构复习)
- Java集合学习总结
- 软考嵌入式系统设计师2013年上午试题总结
- spring security的权限页面标签可以根据 ifAnyGranted="ROLE_SYSTEM" 这个不同的权限觉得在<sec:authorize的作用不作用,就相当于c:if标签的作用
- Java访问者模式以及在访问者模式中使用反射