Vector作为返回值时出现的问题
2014-01-18 17:09
204 查看
关于Vector作为函数的返回值,有几点需要说明:1.首先如果Vector是一个局部的变量,那么返回该Vector的引用是十分危险的,因为在Vector超出作用域的,会自动调用相关的析构函数(~Vector()),如果Vector中存放的是类(ClassName)对象的指针,则不会调用相关的类ClassName析构函数,只会把相关的空间清空(也就是Vector.size()=0),这样会造成内存泄露。但是如果Vector中存放的是类(ClassName)的对象,则会调用相关的类ClassName析构函数。所以如果Vector是一个局部的变量,那么返回该Vector的引用是十分危险的,因为该Vector已经被析构。例子:
2.返回引用的时候需要注意,不能将函数声明成 const,否则编译不通过例如:std::vector<className *> & GetVec() const;//声明std::vector<className *> & className1::GetVec() const//ERROR{ 。。。}//编译错误const std::vector<className *> & GetVec() const;//声明,这样就可以了,也就是必须返回的是const的引用,才行,当然也可以两头都不用const!2.如果不是局部变量,可以返回引用或者该Vector的迭代器(Iterator)
//在一个函数中写下如下代码: //其中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的析构函数 |
相关文章推荐
- 小波变换 完美通俗解读【转载】
- i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例
- [shell-命令] 摘要
- UVA1339仿射和换位密码
- ubuntu下安装与卸载软件方法-转载
- linux故障,无法启动的解决方法
- vector的erase函数
- UVA 10382喷水设施
- 赫夫曼编码
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- Fifa Ultimate Team Millionaire Trading Center - Launching Now!
- Yii Framework 开发教程(14) UI 组件 MaskedTextField示例
- sdut2164Binomial Coeffcients(组合数求模)
- Mac和Windows中常见中文字体的英文名称
- Cordova 3.3 开发环境搭建(视频)
- java学习笔记(一)
- XML
- Yii Framework 开发教程(13) UI 组件 ContentDecorator示例
- Yii Framework 开发教程(12) UI 组件 ClipWidget示例
- 百度开源编辑器内容获取与更改