Переместить значение из локального стека в кучу? (С++)

как я могу взять результат 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, чтобы изменить подпись этой функции, чтобы она не возвращала копию.

Что плохого в том,что этот объект находится в стеке?