c++学习笔记——智能指针】的更多相关文章

智能指针是为了便于管理动态内存,能够自动管理释放所指向的对象. 智能指针共有三种:1.shared_ptr允许多个指针指向同一个对象:2.unique_ptr独占所指向的对象:3.weak_ptr是一个伴随类,它是一种弱引用,指向shared_ptr所管理的对象.这三种类型都定义在memory头文件中. 下面是一个在网上看到的智能指针的实现原理代码: class U_Ptr { friend class HasPtr; int *ip; size_t use; U_Ptr(int *p) : i…
前面已经学习过auto_ptr,这里补充另外一种智能指针,比auto_ptr要更强力更通用的shared_ptr. shared_ptr 简介及使用选择  几乎所有的程序都需要某种形式的引用计数智能指针,这种指针让我们不再需要为两个对象或更多对象共享的对象的生命周期而编写复杂的逻辑(写起来有点绕口),当被共享的对象引用计数降为0时,被共享对象被自动析构. 引用计数指针分为插入式(instrusive)和非插入式(non-instrusive)两种.前者要求它所管理的类提供明确的函数或数据成员用于…
1.新的标准库提供了两种智能指针类型,shared_ptr允许多个指针指向同一个对象,unique_ptr则独占所指的对象.标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象. 2.智能指针也是模板,默认初始化的智能指针中保存着一个空指针. 3.智能指针的操作: 4.make_shared用参数来构造指定类型的对象. std::shared_ptr<int> p = std::make_shared<int>(42); // 指向一…
1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他 2. shared_ptr: 每添加一次引用 就+1,减少一次引用,就-1:做到指针进行共享 3. unique_ptr: 一个指针同时只能有一个使用者使用 4. weaked_ptr: 与shared_ptr搭配使用 1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr 是通过指针保持对象共享所有权的智能指…
1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他(放弃) 2. shared_ptr: 拥有共享对象所有权语义的智能指针 3. unique_ptr: 拥有独有对象所有权语义的智能指针 4. weaked_ptr: 到 std::shared_ptr 所管理对象的弱引用 1.1 unique_ptr 参考:https://zh.cppreference.com/w/cpp/memory/unique_ptr std::unique_ptr 是通过指针占有并管理另一对象,并在…
1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他(放弃) 2. shared_ptr: 拥有共享对象所有权语义的智能指针 3. unique_ptr: 拥有独有对象所有权语义的智能指针 4. weaked_ptr: 到 std::shared_ptr 所管理对象的弱引用 1.1 weak_ptr 参考:https://zh.cppreference.com/w/cpp/memory/weak_ptr std::weak_ptr 是一种智能指针,它对被 std::shared…
C语言中,最灵活但又容易出错的莫过于指针了.而指针数组,是在C中很常见的一个应用.指针数组的意思是说,这个数组存储的所有对象都为指针.除了存储对象为指针,即一个地址外,其它操作和普通数组完全一样. #include <stdion.h> int main() { int i; char *name[] = {"BASIC", "FORTRAN", "C++", "Pascal", "COBOL"…
简介 weak_ptr是shared_ptr的观察者,它不会干扰shared_ptr所共享对象的所有权,当一个weak_ptr所观察的shared_ptr要释放它的资源时,它会把相关的weak_ptr的指针设置为空,防止weak_ptr持有悬空的指针.为什么需要weak_ptr,很多情况下需要旁观或者使用一个共享资源,但不接受所有权,如为了防止递归的依赖关系,你就要旁观一个资源而不能拥有所有权,或者为了避免悬空指针(悬空指针和野指针的概念经常不太区分,都指那些指向已释放的或者访问受限制的内存的指…
指针与数组 ,,,,}; int *p; p = a; printf("*a = %d\n",*a); printf("*p = %d\n",*p); printf(]); printf(]); 数组名就是数组的首地址.以上输出结果都一样.数组名基本上和指针等价.但a是常量,不可以进行a++或者a+=1等操作,而指针p则可以. 指针数组和数组指针 数据类型 *变量名[] //首先它是一个数组,数组的元素是一个指针,也就是说每个元素存储的内容是一个地址 ]; 数据类型…
Objective-C 指针 每一个变量是一个内存位置和每一个存储单元都有其定义的地址,可以使用符号(&)的运算符,它表示内存中的地址访问. a. 我们定义一个指针变量 b. 分配一个指针变量的地址 c. 最后访问提供的地址指针变量的值.这是通过使用一元运算符*返回值的变量,其操作数位于指定的地址. 实例: #import <Foundation/Foundation.h> int main () { ; /* actual variable declaration */ int *i…