Деструктор объекта - параметра функции
От: SergioNM  
Дата: 19.01.11 13:55
Оценка:
Вот такой простенький пример взят из книги Г.Шилдта "Самоучитель C++"

#include <iostream>
using namespace std;

class samp
{
    int i;
public:
    samp(int n)
    {
        i = n;
        cout << "Constructor" << endl;
    }
    ~samp()
    {
        cout << "Destructor" << endl;
    }
    int get_i() { return i;}
};

int sqr_it(samp ob)
{
    return ob.get_i()*ob.get_i();
}

int main()
{
    samp a(10);

    cout << sqr_it(a) << endl;

    return 0;
}


Результат работы согласно книге:
Constructor
100
Destructor
Destructor


Что меня смущает: получается, что main() сначала вывела результат работы функции, а потом только вызвался деструктор объекта, использовавшегося внутри функции. По-моему должно быть наоборот.
У меня на машине так и есть:
Constructor
Destructor
100
Destructor


Может ли этот порядок выполнения зависеть от платформы, от компилятора? Может ли какой-нибудь хитрый компилятор в целях хитрой оптимизации вызывать всё именно в таком порядке, как в книге? Ведь естественный порядок — сначала вызвать деструктор, потом вывести "100".

Или же просто неточность в книге? Я не супер-пупер специалист по C++, чтобы утверждать это наверняка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.