jni返回指针(值返回和指针返回简说)
导读:值返回和指针返回简说 好吧,这是常识,我说快点。 C ﹡ c = get_c( ; 这是指针返回。 C c =...
值返回和指针返回简说
好吧 ,这是常识 ,我说快点 。 C ﹡ c = get_c(); 这是指针返回 。 C c = get_c(): 这是值返回 。 指针返回的缺点是 ,你必须检测返回指针的有效性 ,也就是NULL 。并且 ,你需要手工管理指针释放 。而优点则是避免了值拷贝 ,还有可以返回空值 ,即通过返回NULL表示没有值的情况 。 而引用返回最大的优势在于 ,变量的生存周期和作用域相同 ,你无需管理释放问题 。然而缺陷就是庞大的拷贝开销 。 在get_c返回的时候 ,会return一个对象 。这个对象是子函数作用域对象(sub function scope) ,会随着子函数退出而失效 。因此 ,在返回值的时候会引发拷贝 。这种拷贝有两种可能 。 1. 拷贝构造 当返回值被用于某个对象的声明时,会触发拷贝构造函数。被返回的对象会作为拷贝构造参数传递(引用传递) ,而拷贝出的对象就是被生成对象 。 2. 赋值算子 即operator = 。当对某个已经声明对象进行赋值时 ,会发生这种现象。 当然,近代编译器对于“在返回时进行构造用于返回后的构造 ”这种情况做了优化 ,通称RVO优化 。例如上文 ,如果get_c中使用return C(a, b);进行返回 ,实际上只有C::C(a, b)的调用 ,而没有C::C(const C & c)的调用 。创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!