Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1501267
  • 博文数量: 218
  • 博客积分: 6394
  • 博客等级: 准将
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-08 15:33
个人简介

持之以恒

文章分类

全部博文(218)

文章存档

2013年(8)

2012年(2)

2011年(21)

2010年(55)

2009年(116)

2008年(16)

分类: C/C++

2009-04-08 19:12:16

关于Vector作为函数的返回值,有几点需要说明:
    1.首先如果Vector是一个局部的变量,那么返回该Vector的引用是十分危险的,因为在Vector超出作用域的,会自动调用相关的析构函数(~Vector()),如果Vector中存放的是类(ClassName)对象的指针,则不会调用相关的类ClassName析构函数,只会把相关的空间清空(也就是Vector.size()=0),这样会造成内存泄露。但是如果Vector中存放的是类(ClassName)的对象,则会调用相关的类ClassName析构函数。所以如果Vector是一个局部的变量,那么返回该Vector的引用是十分危险的,因为该Vector已经被析构。
例子:
   

//在一个函数中写下如下代码:

//其中testObject和pTestObject是成员变量,这样做主要是便于测试

std::vector<CTestObject>testObjectVec;
testObjectVec.push_back(testObject);
std::vector<CTestObject *> pTestObjectVec;
pTestObject =new CTestObject();
pTestObjectVec.push_back(pTestObject);

//在函数执行结束的时候,会自动调用CTestObject的析构函数一次,这是由于testObjectVec析//构造成的,但是 pTestObjectVec的析构并没有造成调用CTestObject的析构函数

    2.返回引用的时候需要注意,不能将函数声明成 const,否则编译不通过
    例如:
    std::vector & GetVec() const;//声明
    std::vector & className1::GetVec() const//ERROR
    {      。。。
    }
//编译错误
    const std::vector & GetVec() const;//声明,这样就可以了,也就是必须返回的是const的引用,才行,当然也可以两头都不用const!
    2.如果不是局部变量,可以返回引用或者该Vector的迭代器(Iterator)
阅读(10117) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~