【原】函数返回一个指针以及返回STL对象的问题

1. 关于某函数返回指针问题:
1 int *func(int a[])
2 {
3      int * b = a;
4      return b;//指针b并没有被释放
5 }
6  
7 int *c = func(array);

 

看上面的这个例子,指针b在函数func内没有被释放。在IOS里面,一般的措施是 return [b autorelease]; 编译器会自动跟踪b对象的使用情况,自动释放。但在c/c++里面是没有autorelease机制的。那怎么办呢?我们要明确一个问题,在上面的例子中,是肯定会发生内存泄露的。处理的方法是, 在调用的地方,对接收者进行释放,即在使用完c指针后,对c进行释放:
 
delete c; 
 
 
2. 函数返回vector对象的问题:
vector<int> func(void)
{
     vector<int> value;
     return value;
}

  

以上这样表达是可以的,虽然在func函数内部,value只是一个局部对象,但是在返回的时候,在碰到return把value临时对象销毁前, 系统会调用vector的拷贝构造函数,对vector的所有元素拷贝一份,生成临时对象,传给外部。所以说,这种方法 只适用于vector比较小的情况。对于vector比较大的情况,应该把vector的引用作为形参传给函数,无返回值:
void func(vector<int> & value)
{
     ...
}

转载于:https://www.cnblogs.com/wengzilin/archive/2013/03/27/2985298.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值