Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > создание и уничтожение переменных


Автор: azer88 9.10.2011, 20:05
мне нужно знать когда создается переменные a и  x  и когда они уничтожаются
Код

#include <iostream>
using namespace std;
int f(int);
int main()
{
    int a;
    a=100;
    f(a);
    system("pause");
    return 0;
}
int f(int x)
{
    return x;
}


создается a, потом x, потом x уничтожаются, а в конце уничтожаются a.
правильно ли мой вариант?

Автор: newbee 9.10.2011, 20:09
а создается перед входом в мэйн, после выхода - уничтожается. х создается перед (каждым!) входом в ф, после выхода уничтожается.

Автор: ShadowC 9.10.2011, 21:20
в С++ алгоритм выполнения функций построен из стеков,каждый стек это функция,правило простое - последним вошел первым вышел,поэтому да ты правильно решил что а живет до тех пор пока выполняется функция main

Код

#include <iostream>
using namespace std;
int f(int);
int z(int);
int main()
{
    int a;
    a=100;
    f(a);
    system("pause");
    return 0;
}
int f(int x)
{
z(x);
return x;
}
int z(int y)
{
 return y;
}


y - последним создается и первым уничтожается,пока жива z жив x и a,но если пометить переменную как static она не будет уничтожаться а будет хранится все время выполнения программы,но будет известна только в теле своей функции или блока в зависимости от того где она обьявлена.

Автор: borisbn 10.10.2011, 11:16
Код

#include <iostream>
using namespace std;
class LifeTime
{
public:
    LifeTime() {
        cout << "LifeTime ctor " << this << endl;
    }
    ~LifeTime() {
        cout << "LifeTime dtor " << this << endl;
    }
    LifeTime( const LifeTime & other ) {
        cout << "LifeTime copy ctor " << this << " other = " << &other << endl;
    }
    LifeTime & operator=( const LifeTime & other ) {
        cout << "LifeTime operator= " << this << " other = " << &other << endl;
        return *this; 
    }
};

LifeTime f(LifeTime);

int main()
{
    LifeTime a;
    f(a);
//    system("pause");
    return 0;
}
LifeTime f(LifeTime x)
{
    return x;
}

http://liveworkspace.org/code/3145f8cdfc60245e92b4b13e0510d03f

Цитата
LifeTime ctor 0xbfa271ad
LifeTime copy ctor 0xbfa271af other = 0xbfa271ad
LifeTime copy ctor 0xbfa271ae other = 0xbfa271af
LifeTime dtor 0xbfa271ae
LifeTime dtor 0xbfa271af
LifeTime dtor 0xbfa271ad


azer88, возьми этот LifeTime. Пригодится при изучении.

Автор: ShadowC 10.10.2011, 13:05
помоему адреса ты тут рановато вспомнил,он еще не изучает указатели

Автор: newbee 10.10.2011, 13:11
ShadowC, а отличать переменные ты как будешь? smile

Да, можно внутрь объекта передавать идентифицирующие строки, при копировании добавлять префикс  "copy of", но... зачем, если есть указатели?))

Автор: ShadowC 10.10.2011, 14:26
Цитата(newbee @ 10.10.2011,  13:11)
ShadowC, а отличать переменные ты как будешь? smile

Да, можно внутрь объекта передавать идентифицирующие строки, при копировании добавлять префикс  "copy of", но... зачем, если есть указатели?))

да,но в неумелых раках указатели оружие массового поражения  smile  smile  smile 

Автор: mes 10.10.2011, 14:37
Цитата(ShadowC @  10.10.2011,  13:26 Найти цитируемый пост)
да,но в неумелых раках указатели оружие массового поражения

поэтому использовать адрес как идентификатор объекта ни в коем случае нельзя ?!
 smile

Добавлено через 1 минуту и 1 секунду
Цитата(ShadowC @  10.10.2011,  12:05 Найти цитируемый пост)
,он еще не изучает указатели 

а где в примере используются указатели ?!  smile 


Автор: newbee 10.10.2011, 14:39
Цитата(ShadowC @  10.10.2011,  15:26 Найти цитируемый пост)
да,но в неумелых раках указатели оружие массового поражения
Он аккуратно, read-only ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)