关于Vector作为函数的返回值
来源:互联网 发布:windows资源管理器占用 编辑:程序博客网 时间:2024/05/17 01:13
关于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作为函数的返回值
- 关于ajax 作为函数返回值的问题
- Vector作为返回值时出现的问题
- NotesDocument 作为函数返回值的问题
- const作为函数返回值的作用
- 具有返回值的函数之作为
- 引用作为函数返回值的情况
- 将数组作为函数的返回值
- 指针作为函数的返回值
- 指针作为函数的返回值
- 【C++】指针作为函数的返回值
- vector 作为参数和返回值
- 临时对象作为函数返回值返回的分析
- 数组作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 单点登录 Ucenter 分析
- 思科CCNA第二学期第一章答案
- 苏飞论坛
- 从域名获取IP地址
- uva 10100 Longest Match(最长公共子序列)
- 关于Vector作为函数的返回值
- 【编程拾遗】预编译头文件来自编译器的早期版本
- Android的volley框架心得
- 第一章:初识lucene
- 经销商导入存储过程(oracle)
- iOS更改NavigationBar Title颜色字体
- 对图中一些概念的区分
- ADB常用命令笔记
- 实现实现易信的圆形图像和对话列表的图像显示部分