| 查看: 1709 | 回复: 6 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
[求助]
VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取?
|
|||
|
偶以前经常采用这种方式来进行C++的编程,只是在用delete释放内存时需要小心一些。 用这种方式编程的一个好处在于,比如计算矩阵运算,例如A+B时,可采用运算符+的重载来进行,这样在使用程序包时会很方便。 可最近喜欢在结构体中的使用析构函数,发现有个问题,就是子函数返回结构体时,会自动执行析构函数(即使当此结构体为外部变量时依然如此),因此把结构体中的指针内存提早释放,导致返回的结构体中的指针也相应被释放,最终出错。 我看书中的程序范例在计算矩阵或者多项式时,都不是采用运算符重载,而是用常规的函数,把所用用到的结构体都用加&的方式赋过来,才不会被析构函数释放,可这种操作显然太麻烦?但不知道是不是以前我的编程方式,本身就是一种错误的习惯,还是说干脆放弃使用析构函数,每次手动释放内存?可是有没有更好的方式可以二者兼得呢? |
» 猜你喜欢
请问有评职称,把科研教学业绩算分排序的高校吗
已经有3人回复
孩子确诊有中度注意力缺陷
已经有12人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
2026博士申请-功能高分子,水凝胶方向
已经有6人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
» 本主题相关价值贴推荐,对您同样有帮助:
[求助]河南或者西安有那个学校的乳品专业研究生比较好?
已经有10人回复
帮忙给看看这个matlab优化函数 问题
已经有8人回复
【转载】世界数学名题欣赏丛书-无处可微的连续函数【已搜无重复】
已经有83人回复
使用PGI编译VASP中无法使用长数组
已经有5人回复
结构体所占内存
已经有8人回复
三维数组换行输入到文件(intel fortran 编译器)
已经有6人回复
【求助】使用按照版主编译出来的music_gcmc.exe运行自带的第8个例子的问题
已经有10人回复
【求助】从文件读入数组遇到困难
已经有3人回复
【求助】fluent计算中,udf编译通过,初始化出错
已经有11人回复
【求助】VASP考虑自旋轨道耦合的话,如何编译
已经有17人回复
【答案】应助回帖
★ ★ ★
朱biyun: 金币+3, ★★★很有帮助, 谢谢 2012-07-20 15:56:30
朱biyun: 金币+3, ★★★很有帮助, 谢谢 2012-07-20 15:56:30
|
【VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取?】 题目上问的那两个问题: 变量是具有生存周期的。在某个函数中声明、且定义的变量(纠结,这个问题让我想起了extern中的declares but does not define,- -||||黑线),都会在函数return之后结束生存周期,无论那个变量是指针还是结构体。 如果你的结构体(class example)重载了‘=’,能够赋值,那么函数返回值为普通结构体,做法可行。 返回带指针的结构体,要防止指针指向的内存,因结束生命周期而失效。(尤其是指向函数变量的,“过期就作废”;但是用new, malloc开辟空间的不会)。 我主要是做图像方面。会用到很多矩阵。图像矩阵类cvMat操作的时候,基本上都是用指针。 cvMat* cvCreateMat ( int rows, int cols, int type ); 是建立矩阵。返回值是指针。 例如mat1 = cvCreateMat( 3, 4, sizeof(char) ) 无论执行什么函数,最通常的做法就是,把mat1指针各种传递。 |
6楼2012-07-19 17:20:57
libralibra
至尊木虫 (著名写手)
骠骑将军
- 程序强帖: 40
- 应助: 817 (博后)
- 金币: 12914.1
- 红花: 64
- 帖子: 2238
- 在线: 287.3小时
- 虫号: 696514
- 注册: 2009-02-05
- 专业: 计算机软件

2楼2012-07-07 18:58:14
nebulaly
木虫 (著名写手)
- 应助: 7 (幼儿园)
- 金币: 4170.1
- 散金: 220
- 红花: 5
- 帖子: 1311
- 在线: 410.5小时
- 虫号: 910959
- 注册: 2009-11-24
- 专业: 计算机应用技术
3楼2012-07-08 01:54:06
|
matrix operator+(matrix& A) //矩阵加法 { int i,j; ANSm.build(m,n); if(n!=A.n||m!=A.m) { printf("\nERROR!!!\n行列不对应的两个矩阵不能相加。" ;return ANSm; } for(i=0;i return ANSm; } 这是定义在结构体matrix中的一个成员,用于计算矩阵加法,其中m,n分别表示矩阵的行与列,二重指针M对应矩阵的二维数组,对象ANSm是在外部定义的,在返回ANSm后,它就自动执行了ANSm中的析构函数,因此把返回结构体中的指针也释放了。 目前偶的一个办法就是在结构体中增加一个判定变量,使得析构函数在主函数main结束前,不能释放ANSm中的指针。 |
4楼2012-07-08 09:39:47














回复此楼
;