小编J.C*_*see的帖子

关于C++中临时破坏的确切时间的问题

是以下代码安全(它在DEBUG中工作):

void takesPointer(const Type* v);//this function does read from v, it doesn't alter v in any way
Type getValue();
...
takesPointer(&getValue());//gives warning while compiling "not an lvalue"
...
Type tmp = getValue();
takesPointer(&tmp);//this is safe, and maybe I should just do it, instead of posting here
Run Code Online (Sandbox Code Playgroud)

所以 - 这样安全吗?我应该忘记它并使用显式tmp的代码吗?

但无论如何 - 如果允许优化器在从此调用返回之前杀死临时值,我仍然感兴趣:

takePointer(&getValue())
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢大家!不幸的是我无法更改函数"takePointer"(它是库的一部分),我只能将它包装在一个函数"takeReference"中,它调用takePointer - 这会消除副本,还是编译器仍然可以创建一个副本("类型"是一个int-3x3-Matrix,所以它不会那么糟糕,但仍然......)?

inline void takesReference(const Type& v){ takesPointer(&v); }
Run Code Online (Sandbox Code Playgroud)

关于破坏的时间:在"takePointer"返回之后,还是在它被调用之后它会被销毁?

c++ pointers temporary destruction

3
推荐指数
2
解决办法
287
查看次数

标签 统计

c++ ×1

destruction ×1

pointers ×1

temporary ×1