如何从方法调用中获取对象值作为结果并将其放在堆上?
例如:
Qt QImage::scaledToWidth
方法返回QImage
对象的副本.
现在我正在做:
QImage *new_img_on_heap = new QImage(old_imgage_on_heap->scaledToWidth(2000));
Run Code Online (Sandbox Code Playgroud)
这是唯一的方法吗?看起来它已经经历了制作第三个全新物体的麻烦,当我已经在堆栈上有一个完美的好物品时.
我想把它放在堆上的原因是因为真实QImage
的很大,我希望它比当前方法的生命周期更长.我打算在我班上的一个字段中填充指针.
我知道QImage
有一些隐含的数据共享,但我并不清楚它是如何工作的.另外,我想知道一个通用的解决方案,如果我需要使用不像Qt那样精心设计的对象.
Jam*_*nze 15
对象由其地址标识.如果你想在另一个地址,你必须构建一个新地址; 你无法移动物体.(即使使用C++ 11,新的"移动"语义实际上并不会移动对象;如果您知道自己不需要移动它的值,它们会提供一种优化的移动值的方法.)
首先,在大多数情况下,您应该更喜欢堆栈.
其次,当您在堆上分配对象时,您应该将原始指针包装在堆栈中的某个托管对象中.如果没有别的,请为异常安全做.
第三,Qt的对象通常做到这点即有写作没有优势new QImage
或new QMap<int>
等.
然而,将非堆对象移动到堆上的正确方法就是说
new ObjectType (old_instance)
Run Code Online (Sandbox Code Playgroud)
如果使用临时对象执行此操作,例如
new ObjectType (create_object ())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9747 次 |
最近记录: |