1. 初始化指针 确保所有指针在使用前都被初始化。未初始化的指针可能包含任意值,尝试解引用这样的指针是危险的。 int* ptr = nullptr;//使用 nullptr 初始化指针 2. 检查指针是否为空 在解引用指针之前,总是检查它是否为空。 if(ptr !=nullptr) {//现在可以安全地使用 ptr} 3. 使用智能指针 C++11 引入...
我想出了一种很好的解释:我们以int (*int_array_ptr)[10]举例,编译器首先通过*发现int_array_ptr是一个指针,而后通过余下的int[10]来确定这个指针指向的数据类型。相反,在接下来指针数组的int* (int_ptr_array[10])例子中,编译器先确定int_ptr_array[10]是一个数组,而后用余下的int*来确定数组的每个元素...
参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset()赋值为另一指针。
智能指针 unique_ptr 使用 和shared_ptr不同,可以有多个shared_ptr指向同一个内存,只能有1个unique_ptr指向某个内存。因此unique_ptr不支持普通的拷贝和赋值。 一,先来个表格,唠唠unique_ptr 小例子索引 小例子 include <iostream>#include<memory>#include<vector>using namespacestd;classTest{public: Test(intd...
智能指针auto_ptr在被赋值操作的时候,被赋值的取得其所有权,去赋值的丢失其所有权。如下面的例子: auto_ptr< string> ps (new string ("I reigned lonely as a cloud."); auto_ptr<string> vocation; vocaticn = ps; 1. 2. 3. 执行完上面这步之后,ps就不再指向原来的string串了,变成了空串,vocation...
char16_t*char_ptr{nullptr}; b.指针的具体使用 (1)指针赋值 对指针变量使用操作符"="会改变指针的指向,所以,对指针采取赋值操作可以理解为指针方向的重定向。 例如,如果p1和p2是两个指针变量,"p2=p1"操作会让p2去指向p1当前正在指向的内存地址。
2. 嵌套指针释放不完全 释放指针数组时,不光需要释放对象的内存空间,还要释放其中的每个指针。如果只是释放对象的内存空间,就会导致释放不完全,造成内存泄漏。 // 数组指针 int (*a)[N] = new int[M][N]; // M元数组的头指针a,指向一个N元数组,N必须为已知 ...
智能指针share_ptr记录 2019-12-23 10:39 −shared_ptr 是一个共享所有权的智能指针,允许多个指针指向同一个对象。shared_ptr 对象除了包括一个对象的指针,还包括一个引用计数器。当每给对象分配一个share_ptr的时候,引用计数加一;每reset一个share_ptr, 或者修改对象的指向(指向其他对象或者赋值nullptr)... ...
为了方便用户使用 shared_ptr 智能指针,shared_ptr 模板类还提供有一些实用的成员方法,它们各自的功能如表 1 所示。 除此之外,C++11 标准还支持同一类型的 shared_ptr 对象,或者 shared_ptr 和 nullptr 之间,进行 ==,!=,= 运算。 下面程序给大家演示了 shared_ptr 智能指针的基本用法,以及该模板类提供了一些...