shared_ptr类型的对象都能够获得指针的所有权并共享该所有权:一旦它们获得所有权,当最后一个所有者释放该所有权时,指针的所有者组就负责删除该所有者。 shared_ptr对象在自身被销毁后,或者一旦其值因赋值操作或显式调用 shared_ptr::reset 而发生更改,就会释放其共同拥有的对象的所有权。一旦通过指针共享所有权的所有shared_pt
1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset(...
标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 make_shared的标准库函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。与智能指针一样,make_shared也定义在头文件memory中。 // 指向一个值为42的int的shared_ptr ...
weak_ptr指针通常不单独使用,只能和 shared_ptr 类型指针搭配使用,可以作为shared_ptr类内的对象。 unique_ptr unique_ptr 是一个独享所有权的智能指针,它提供了严格意义上的所有权。 nullptr NULL是一个宏,它被定义为0(也就是int型的零),或者0L(long型的零)。当想传一个空指针,让程序调用特定重载函数,宏...
unique_ptr则独占所指向的变量。 weak_ptr则指向shared_ptr所管理的变量。 2.智能指针的基础用法 1.智能指针的初始化 智能指针是基于类模板生成的,因此,要初始化一个智能指针,就必须声明指针所指向的数据类型,不然智能指针里面包含的原始指针是个空指针。
C++中的nullptr相比C语言中的NULL具有更好的类型安全性。nullptr是一个强类型的指针空值,而NULL在C中通常被定义为0或(void*)0,这可能导致隐式类型转换的问题。使用nullptr可以避免这类问题,并且使代码更加清晰和易于理解。 关于本问题的更多回答可点击原文查看: ...
智能指针share_ptr记录 2019-12-23 10:39 −shared_ptr 是一个共享所有权的智能指针,允许多个指针指向同一个对象。shared_ptr 对象除了包括一个对象的指针,还包括一个引用计数器。当每给对象分配一个share_ptr的时候,引用计数加一;每reset一个share_ptr, 或者修改对象的指向(指向其他对象或者赋值nullptr)... ...
classMyClass{int*ptr;public:MyClass(){// 完蛋,忘记初始化ptr了}};// 使用ptr时可能崩溃 1. 2. 3. 4. 5. 6. 7. 正确做法: 复制 classMyClass{int*ptr;public:MyClass():ptr(nullptr){// 构造时就初始化// 或者分配内存ptr=newint(42);}}; ...
创建了一个项目DemoProject,添加了一个可执行文件DemoExecutable和两个库(一个静态库DemoStaticLibrary和一个动态库DemoSharedLibrary)。我们还将静态库链接到了可执行文件。 面试题B:如何在CMake中管理和链接外部库? 答案: 在CMake中,可以使用find_package()或add_subdirectory()命令来查找和添加外部库。find_package...
智能指针 unique_ptr 使用 和shared_ptr不同,可以有多个shared_ptr指向同一个内存,只能有1个unique_ptr指向某个内存。因此unique_ptr不支持普通的拷贝和赋值。 一,先来个表格,唠唠unique_ptr 小例子索引 小例子 include <iostream>#include<memory>#include<vector>using namespacestd;classTest{public: ...