1.指针赋值: o确保指针在使用之前已经被正确初始化。未初始化的指针可能导致未定义的行为。 o避免悬挂指针(dangling pointer)。当指针指向一个已被释放的内存块时,再次使用该指针是危险的。 o避免野指针(wild pointer)。这是指向未分配内存的指针。 o当指向的内存被释放后,确保将指针设置为NULL,以防止野指针的产...
这样两个指针将指向不同的对象,其中的一个对象是另一个对象的副本,缺点是浪费空间,所以智能指针都未采用此方案。 建立所有权(ownership)概念。对于特定的对象,只能有一个智能指针可拥有,这样只有拥有对象的智能指针的构造函数会删除该对象。然后让赋值操作转让所有权。这就是用于auto_ptr和uniqiie_ptr 的策略,但uniq...
智能指针在初始化时,还可以用于指向动态分配的数组。 代码样例,创建长度为10的整型数组: 代码语言:javascript 复制 //方式一auto Array_1=make_unique<int[]>(10);//方式二std::unique_ptr<int[]>Array_2(newint[10]);//类型+[],表示初始化指向数组的智能指针//后面的具体用法和数组类似Array_1[0]=1;...
实现智能指针有两种经典策略:一是引入辅助类,二是使用句柄类。 以下样例使用辅助类来实现: #include"iostream"usingnamespacestd;//定义一个普通类classbookClass{private:string name;intprice;public:intgetPrice(){returnprice;}};//辅助类classCounter{private:friendclasssmartPoint;Counter(bookClass*book):bk(bo...
实现智能指针有两种经典策略: 一是引入辅助类, 二是使用句柄类。 以下样例使用辅助类来实现: #include"iostream" using namespace std; //定义一个普通类 class bookClass{ private: string name; int price; public: int getPrice(){ return price; } ...
注意,同一普通指针不能同时为多个 shared_ptr 对象赋值,否则会导致程序发生异常。例如: 4) 在初始化 shared_ptr 智能指针时,还可以自定义所指堆内存的释放规则,这样当堆内存的引用计数为 0 时,会优先调用我们自定义的释放规则。 在某些场景中,自定义释放规则是很有必要的。比如,对于申请的动态数组来说,shared_pt...
C++程序设计的一种常用技术——智能指针(smart pointer),主要内容包括引用计数(reference count)和句柄类(handle class)。 当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。 智能...
auto_ptr是一个智能指针,用于管理通过新表达式获得的对象,并在销毁auto_ptr本身时删除该对象。 当使用auto_ptr类描述对象时,它存储指向单个已分配对象的指针,以确保当其超出范围时,它指向的对象必须自动销毁。它基于专有所有权模型,即相同类型的两个指针不能同时指向同一资源。如以下程序所示,指针的复制或分配会更改...
1.修饰char代表当前当前指针指向的内容不可改变,所以在对指针内容pChar做赋值运算时会报:表达式必须为可修改的左值 2.修饰*号表示当前指针指向不可以改变,如果对指针重定向,就会出现:表达式必须为可修改的左值的编译问题。 4.二级指针 指向指针的指针称为二级指针,定义方式如下: char _a = 'a'; char* pa = ...
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。 不想看toy code的读者可以直接拉到文章最后看这部分的总结。 shared_ptr shared_ptr 基本用法 shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计...