2015-03-01 2 views
-2

В C++, У меня есть функция, которая возвращает объект первого класса по значению, как это:объекта, возвращаемый из вызовов функций деструктора

Image Video::getFrame(int frame) { 
    Image img(...); 

    ... processing ... 

    return img; 
} 

После того, как значение возвращаются и img выходит из области видимости, то Image вызывается деструктор, уничтожая все данные внутри объекта. Поэтому всякий раз, когда я делаю это:

Image frame = video.getFrame(10); 

frame появляется, как будто она полностью неинициализированная.

Я думал, что возврат по стоимости должен был сделать полную, отдельную копию img. Почему-то я не понимаю, что происходит. Как я могу решить эту проблему?

Примечание: Ни одна из переменных-членов в пределах Image - указатели.

+0

Как вы определяете, что 'frame' неинициализирован? – 0x499602D2

+0

@ 0x499602D2 Я сказал: «Похоже, что он полностью неинициализирован». Это вызвано вызовом 'Image :: ~ Image()' после возвращения функции 'getFrame()'. –

+0

Произошла копия, так как вы определяете, что 'frame' был неинициализирован? – 0x499602D2

ответ

0

Я только что узнал, почему. Небольшое несоответствие, которое оказалось большим делом. frame был тип Image* нет Image. Таким образом, он указывал на переменную img внутри функции, а не на копирование ее данных. Когда вызывался деструктор, данные на этой переменной указывали на уничтожение.

Я знал, что это не имеет смысла ...

Смежные вопросы