Re: & и *
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 11.03.05 07:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В чем разница между reference & и pointer *?

А>Или же они заменяют друг друга...

Ну например в этом:

1)
void func1(MyCoolClass *obj)
{
    obj->SomeFunc();
}

void func2(MyCoolClass &obj)
{
    obj.SomeFunc();
}

main()
{
    MyCoolClass someObj;
    func1(0); // Приплыли
    func2(someObj); // Обязаны подать существующий объект, иначе компилятор отматерит
}


2)
MyCoolClass* func1()
{
    MyCoolClass *obj = new MyCoolClass;
    return obj;
}

MyCoolClass& func2()
{
    MyCoolClass val;
    return val; // Убивать за такое надо
}

main()
{
    func1()->SomeFunc(); // Если возвращается не нулевой объект, то работает
    MyCoolClass *obj = func1(); // То же самое..
    obj->SomeFunc();

    func2().SomeFunc(); // Работает!
    MyCoolClass &refObj = func2();
    refObj.SomeFunc(); // ОЙ! А что случилось? Access violation
}


3)
void func() throw(MyCoolException)
{
    throw MyCoolException();
}

main()
{
    try
    {
        func();
    }
    catch(MyCoolException)
    {
        // Нормально - обработали
    }

    try
    {
        func();
    }
    catch(MyCoolException&)
    {
        // Нормально - обработали
    }

    try
    {
        func();
    }
    catch(const MyCoolException&)
    {
        // Нормально - обработали
    }

    try
    {
        func();
    }
    catch(MyCoolException*)
    {
        // Мы никогда сюда не попадём
    }
}


А вообще — возьмите и почитайте какую-нибудь книжку по C++. Например, Страуструпа...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.