Переместить значение из локального стека в кучу? (С++)
как я могу взять результат object-as-value из вызова метода и поместить его в кучу?
например:
Qt QImage::scaledToWidth
метод возвращает копию
3 ответов
объект идентифицируется по адресу. Если вы хотите его в другом адрес, вы должны построить новый; Вы не можете перемещать объекты. (Даже с C++11 новая семантика" перемещения " фактически не перемещает объект; они обеспечивают оптимизированный способ перемещения его значения, если вы знаете что вам не понадобится ценность с того места, куда вы ее перемещаете.)
во-первых, в большинстве случаев вы должны предпочесть стек куче.
во-вторых, когда вы выделяете объекты в куче, вы должны обернуть необработанный указатель в некоторый управляемый объект, который находится в стеке. Если ни для чего другого, сделайте это для безопасности исключений.
В-третьих, объекты Qt обычно именно это т. е. нет никакого преимущества в письменной форме new QImage
или new QMap<int>
etc.
тем не менее правильный способ переместить объект без кучи в кучу-это скажи
new ObjectType (old_instance)
если вы делаете это с временным объектом, например
new ObjectType (create_object ())
тогда это, вероятно,elide дополнительная копия (ссылка сломана для меня -- кэшированные)
начиная с метода
QImage QImage:: scaledToWidth (int width, Qt:: режим TransformationMode = Qt:: FastTransformation ) const
не возвращает адрес QImage (т. е. QImage& ....) чем я думаю, вам не повезло. Вы застряли с копией. Если вы не хотите перекомпилировать библиотеки QT, чтобы изменить подпись этой функции, чтобы она не возвращала копию.
Что плохого в том,что этот объект находится в стеке?