作者:朱金灿
来源:http://blog.csdn.net/clever101
先考考大家,下面一段程序,会有什么问题:
下午同事就遇到上面一段程序类似的问题,他不明白程序为何会在pNewInstance->ChangeName();这一句崩溃。当时我也不是很确定,就这样分析:智能指针变量boost::shared_ptr<MyClass>ptrParam作为一个局部变量,当离开其作用域时,估计是执行了MyClass析构函数。
晚上回来查了下资料,比较标准的解释是:智能指针自动地增加和减少它指向对象的引用计数,当对象引用计数减少到0的时候自动摧毁。如果一个函数使用智能指针作为参数,那么不要把一个没有被其他智能指针引用的对象常规指针作为参数传入到函数中。如果这样做,那么这个对象指针将会被摧毁掉。接下来是这个问题详细描述:
1 常规指针pkObject指向一个动态分配的对象,其引用计数为0。
2 传输pkObject到一个智能指针参数,编译器隐式调用智能指针的构造函数将pkObject转换到一个临时的智能指针,并将对象的引用计数增加到1。
3 在函数调用的作用域,这个临时智能指针通过调用智能指针的拷贝构造函数复制到一个局部智能指针中,并将对象的引用计数增加到2。
4 当函数调用返回的时候,局部智能指针被摧毁,并将对象的引用计数减少到1。
5 在调用完成的时候,临时智能指针对象也被摧毁,并将对象的引用计数减少到0,这导致对象被释放掉。
参考文献:
1.智能指针
分享到:
相关推荐
函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中,具体应用如下: 一、 用指向变量的指针作函数参数 使用指针变量作函数参数,在被调用函数中改变...
第8章 指针——指针变量做函数参数:典型实例C语言程序设计第8章 指针{}{}{}{}实参形参一个典型实例——两数互换程序 1:基本类型变量作函数参数程序 2:
指针函数和函数指针变量指针 函数和函数指针变量
本文主要讲了c语言指针变量作为函数参数传递,下面一起来学习一下
指针变量的定义和运算指针变量作函数参数PPT课件.pptx
指针变量的定义和运算指针变量作函数参数PPT学习教案.pptx
第8章 指针——指针变量做函数参数C语言程序设计第8章 指针指针变量的解引用间接寻址运算符此*非彼*0{return 0;}1为什么要用指针?只要pa指向a,*
指针变量,指针与数组, 指针与函数, 字符串与指针,指向指针的指针
用指针变量作函数参数实现两数交换函数,利用该函数实现数组a和数组b中对应的元素。
第8章 指针——指针变量做函数参数:错误案例分析C语言程序设计第8章 指针计算最高分及其学号void FindMax(int score[],long num
其中函数的起始地址称为该函数的入口地址,将此地址赋给另一个变量,则该变量为一个指向函数的指针变量。 函数型指针变量的定义: 类型 (*标识符)( ); 例如:int (*pf)( ); 类型:指针所指函数的返回值的类型。 ...
04-指针变量作函数参数-典型实例-错误案例分析.pdf
已知每个函数在编译的时候,系统会分配给函数一个入口地址,函数名表示这个入口地址,定义指向函数的指针变量称之为函数的指针变量。 函数返回值可以是 int char float等,当然也可以是地址值,那么函数返回值是地址...
详解函数指针和指针函数 函数类型 (*指针变量名)(形参...“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。
在函数中给C++指针变量赋值,分析了指针变量的特性,并追踪了给指针变量赋值的过程。
本文主要介绍C语言 指针变量作为函数参数,这里整理了相关资料和示例代码,以便大家学习参考理解知识点,有需要的小伙伴可以参考下
用一个函数指针来交换两个数
让大家明白指针函数和函数指针的区别 学C++的都哦那个一被这两个东西弄糊涂了
在C语言中,函数指针变量常见的用途之一是作为函数的参数,将函数名传给其他函数的形参。这样就可以在调用一个函数的过程中根据给定的不同实参调用不同的函数。 例如,利用这种方法可以编写一个求定积分的通用函数,...
程序设计基础