Вот программа:
#include <iostream> using namespace std;
// Обявляется класс с конструктором, деструктором и функцией get(), которая // возвращает закрый параметр a : class myclass { int a; public: myclass(int n){a=n; cout<<"Konstruktor\n";}; ~myclass(){cout<<"Destruktor\n";}; int get(){ return a;}; };
// Создается функция, которой передается класс: void show(myclass b) { cout<< b.get() <<"\n"; };
void main() { myclass s(5); show(s); }
Функции передается копия обекта s, которая затем уничтожается деструктором. Итого, должет сработать один конструктор и два деструктора: один для копии объекта по выходе из функции, другой для самого объекта при завешении программы. По крайней мере, так написано в учебнике.
Однако у меня срабатывает три деструктора. Т.е. программа на выходе дает:
Konstruktor 5 Destruktor Destruktor Destruktor
Но это если использовать gcc.
При использовании двух других компиляторов (не под LINUX) в программе срабатывает два деструктора, как и написано в книге.
Откуда лишний деструктор при компиляции с помощью gcc?
Заранее благодарен.