Vector作为返回值时出现的问题
来源:互联网 发布:华丽上班族电影知乎 编辑:程序博客网 时间:2024/06/04 20:57
关于Vector作为函数的返回值,有几点需要说明:
1.首先如果Vector是一个局部的变量,那么返回该Vector的引用是十分危险的,因为在Vector超出作用域的,会自动调用相关的析构函数(~Vector()),如果Vector中存放的是类(ClassName)对象的指针,则不会调用相关的类ClassName析构函数,只会把相关的空间清空(也就是Vector.size()=0),这样会造成内存泄露。但是如果Vector中存放的是类(ClassName)的对象,则会调用相关的类ClassName析构函数。所以如果Vector是一个局部的变量,那么返回该Vector的引用是十分危险的,因为该Vector已经被析构。
例子:
例如:
std::vector<className *> & GetVec() const;//声明
std::vector<className *> & className1::GetVec() const//ERROR
{ 。。。
}
//编译错误
const std::vector<className *> & GetVec() const;//声明,这样就可以了,也就是必须返回的是const的引用,才行,当然也可以两头都不用const!
2.如果不是局部变量,可以返回引用或者该Vector的迭代器(Iterator)
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的析构函数
例如:
std::vector<className *> & GetVec() const;//声明
std::vector<className *> & className1::GetVec() const//ERROR
{ 。。。
}
//编译错误
const std::vector<className *> & GetVec() const;//声明,这样就可以了,也就是必须返回的是const的引用,才行,当然也可以两头都不用const!
2.如果不是局部变量,可以返回引用或者该Vector的迭代器(Iterator)
0 0
- Vector作为返回值时出现的问题
- 关于Vector作为函数的返回值
- vector 作为参数和返回值
- NotesDocument 作为函数返回值的问题
- Vector中作为全局变量时注意的问题(转)
- 关于C 指针作为返回值的问题
- 抽象类和接口作为返回值类型的问题
- 关于ajax 作为函数返回值的问题
- auto_ptr作为vector的元素会出现什么情况
- 关于类型对象作为形参和返回值时的一些问题
- 引用作为返回值的
- 函数返回值作为左值问题
- 局部变量作为返回值问题
- fstream引用作为函数返回值问题
- 关于Qt Vector返回值问题
- 关于使用vector迭代器出现的问题
- lambda过程作为返回值的例子
- const作为函数返回值的作用
- Yii Framework 开发教程(16) UI 组件 StarRating示例
- svn: Server sent unexpected return value (403 Forbidden) in response to CHECKOUT request for-解决方法
- 怎样提高WebService性能(大数据量网络传输处理)
- 小波变换 完美通俗解读【转载】
- 网络视频监控P2P解决方案
- Vector作为返回值时出现的问题
- 利用格点证明恒等式
- .css("display","none");
- java 多线程简述
- [高考试卷]2012年四川卷
- 0-1背包问题
- 小波变换和motion信号处理(二)【转载】
- 给程序员介绍一些C++开源库
- QTableView中VerticalHeader嵌入checkbox