c++ vector 指针返回值问题

关于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)

时间: 2024-11-05 19:27:44

c++ vector 指针返回值问题的相关文章

引用&amp;&amp;指针&amp;&amp;返回值&amp;&amp;定义声明&amp;&amp;生命周期&amp;&amp;const

1. 首先了解一下声明和定义的区别: ? 声明,其实就是描述一个元素是有什么构成的; ? 定义,其实就是在内存中划分出一个区域且用符号关联起来; ? 变量和对象不加extern永远是定义,类中的除外. 函数只有函数头是声明,有函数体的是定义. 类永远只是声明.类成员函数的函数体是定义. ? 函数的声明和定义的不同点在于函数的声明不包含函数体,仅仅是fact(): 2. 其次了解一下局部对象的生命周期 ? 局部变量 i. 形参和函数体内定义的变量统称局部变量 ii. 局部变量转换成为全局变量,则使

返回vector指针案例

void prog1_static(void) { int pos = 9; // elem will hold the element's value vector<int> *elem; elem = fibon_seq2(pos); cout << elem->size() << endl; for (int in = 0; in < elem->size(); in++) { cout << elem[0][in] <<

vector作为函数返回值

在实际的操作中,我们经常会碰到需要返回一序列字符串或者一列数字的时候,以前会用到数组来保存这列的字符串或者数字,现在我们可以用vector来保存这些数据.但是当数据量很大的时候使用vector效率就比较低了,还有千万别返回引用, 因为你是再函数中定义的vector.一般要将vector作为返回值的话,我们可以这样来实现,我们将它放入函数参数中,添加引用,作为保存数据的容器.例子: 原始的: vector<int> fun1(int num): 更好的处理方法: bool fun1(int nu

【03】指针、返回值、成员函数的const

1 // 2 // 2015-03-05 03/55 3 // 指针.返回值.成员函数 之 const 4 // 5 6 #include <iostream> 7 #include <string> 8 9 using namespace std; 10 11 // ------------------------------ 12 // 1. 指针的const 13 // ------------------------------ 14 const char *p1 = &q

函数指针与指针函数返回值的区别

指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针定义: 类型标识符 *函数名(参数表)eg: int *f(x,y);函数指针是指向函数的指针变量,即本质是一个指针变量.int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 函数指针与指针函数返回值的区别,码迷,mamicode.com

C++ Primer 学习笔记_17_从C到C++(3)--引用、const引用、引用传递、引用作为函数返回值、引用与指针区别

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 一.引用 1.引用是给一个变量起别名 变量: 名称 空间 引用: 引用不是变量 引用仅仅是变量的别名 引用没有自己独立的空间 引用要与它所引用的变量共享空间 对引用所做的改变实际上是对它所引用的变量的改变 引用在定义的时候必须要进行初始化 引用一经初始化,不能重新指向其他变量 2.定义引用的一般格式: (1)类型  &引用名 = 变量名: (2)例如: int a=1; int &b=a; // b是a的别名,因此a和b是同一个单元 (3)

函数指针,函数指针数组,函数返回值为函数指针

函数的名字就是函数的首地址:定义函数指针; int (*p)(int ) p为函数指针变量名字,int 为函数的返回值类型为int型:(int)为函数的形参类型为int型, 注:因为优先级所以要用(*p),否则就会p先和后面的()结合为int*p(int),意思就变为p(int)函数的返回值为int* 注:main2()函数中   int (*p[])(int ,int )  为一维数组,下面写错了, #include<stdio.h> #include<stdlib.h> int

新手,对函数,函数指针,回调函数, 函数指针作为函数的返回值和block的一些见解

很多初学者,学c语言时,看到函数都觉得难,我也是,一开始觉得函数太难了,后来慢慢就理解了 第一:函数 在c语言中最简单的函数一般有四种: 1, 无返回值, 无参数. 2, 无返回值,有参数. 3, 有返回值,无参数. 4, 有返回值,有参数 1, 无返无参  定义方式:      void 函数名(); 一般不怎么用这种形式的函数,可用来输出,打印 void functionOne() { printf("无返回值,无参数"); // 没有返回值不能写return } int main

C基础--指针与函数返回值

#include <stdio.h> #define A 0 int funcA(int a, int b) { return a + b; } /*把指针作为函数的返回值*/ int * funcB(int a, int b) { static int c = A; c = a + b; return &c; } /*通过函数进行内存的申请*/ /* * 参数:要申请的内存大小 * 返回值:申请好的内存的首地址 * 这是一种不好的方式 */ int * funcC(int size)