加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用对(成员)函数返回的对象的引用是否安全甚至可能?

发布时间:2020-12-16 07:24:28 所属栏目:百科 来源:网络整理
导读:我有一个类存储一堆可以在整个程序中更改的值和一个成员函数,它根据这些值计算并返回一个矩阵. 我还有一个函数需要一个const指针指向这样一个矩阵的第一个浮点数. 我不想在某处手动创建局部矩阵.相反,我想同时更新并直接从课程传递给所述功能. 所以,而不是这
我有一个类存储一堆可以在整个程序中更改的值和一个成员函数,它根据这些值计算并返回一个矩阵.

我还有一个函数需要一个const指针指向这样一个矩阵的第一个浮点数.

我不想在某处手动创建局部矩阵.相反,我想同时更新并直接从课程传递给所述功能.

所以,而不是这个:

glm::mat4 matrix = myClass.calculateMatrix();

functionThatneedsMatrix(&matrix [0][0]);

我可以这样做吗?

functionThatneedsMatrix(&myClass.calculateMatrix()[0][0]);

如果是,该矩阵的范围是什么?

解决方法

临时生存直到创建它的完整表达式结束,所以在你的情况下,从calculateMatrix返回的prvalue一直存在,直到; (在functionThatneedsMatrix返回后).所以是的,以这种方式使用它是安全的.

functionThatneedsMatrix(&myClass.calculateMatrix()[0][0]) ;
//                                                        ^
//                                                        |
//                                                temporary lifetime ends here,//                                                after functionThatneedsMatrix returns

可能的UB情况是,如果functionThatneedsMatrix以函数调用结束后可访问的方式返回或存储该指针:

int* p = functionThatneedsMatrix(&myClass.calculateMatrix()[0][0]) ;
//       ^
//       if it returns the pointer value it received as parameter

// p is a dangling pointer at this time

int a = *p; // Undefined behavior

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读