zoukankan      html  css  js  c++  java
  • 【原】函数返回一个指针以及返回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)
    {
         ...
    }
  • 相关阅读:
    Linux 误卸载软件,所有命令不能用了咋办
    MySQL 全局锁和表锁
    MongoDB 基础
    MySQL 常见错误
    MySQL 锁信息和事务
    B2C电子商务平台概述及开发公司推荐
    O2O本地生活平台推荐
    OA办公系统哪个公司做的好
    集团企业OA系统选型推荐
    协同OA办公系统选型推荐
  • 原文地址:https://www.cnblogs.com/wengzilin/p/2985298.html
Copyright © 2011-2022 走看看