24小时热门版块排行榜    

查看: 1756  |  回复: 6
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

朱biyun

铜虫 (小有名气)

[求助] VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取?

偶以前经常采用这种方式来进行C++的编程,只是在用delete释放内存时需要小心一些。
用这种方式编程的一个好处在于,比如计算矩阵运算,例如A+B时,可采用运算符+的重载来进行,这样在使用程序包时会很方便。
可最近喜欢在结构体中的使用析构函数,发现有个问题,就是子函数返回结构体时,会自动执行析构函数(即使当此结构体为外部变量时依然如此),因此把结构体中的指针内存提早释放,导致返回的结构体中的指针也相应被释放,最终出错。

我看书中的程序范例在计算矩阵或者多项式时,都不是采用运算符重载,而是用常规的函数,把所用用到的结构体都用加&的方式赋过来,才不会被析构函数释放,可这种操作显然太麻烦?但不知道是不是以前我的编程方式,本身就是一种错误的习惯,还是说干脆放弃使用析构函数,每次手动释放内存?可是有没有更好的方式可以二者兼得呢?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

流亡诗人

新虫 (初入文坛)

【答案】应助回帖

★ ★ ★
朱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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 朱biyun 的主题更新
信息提示
请填处理意见